我是XNA的初学者。我最近才开始使用GameComponents。我有一个多人游戏叫做更好的乒乓球。我移动球(这是一个对象),通过增加Vector2 (位置)的速度Vector2和更新的hitbox矩形。
然而,通过拥有非常大的速度(如(12,12)),球可能会通过桨,因为它只是跳过桨的矩形“赫盒”。
有没有办法让球做更小的动作,这样它就不会穿过桨(但仍然移动得很快)?
发布于 2014-11-26 07:56:42
您需要插值或推断碰撞。基本上,这意味着不只是检查物体现在所在的位置的碰撞,而是检查对象的碰撞与它的位置以及它将在哪里或过去的位置,然后在这些位置之间检查x次。
Vector2 pos = ball.position;
Vector2 prevPos = ball.previousPosition; // You'll have to keep track of where the ball was 1 frame ago.
for (int i=0; i<COLLISION_PRECISION; i++)
{
Vector2 testPos = lerp(prevPos, pos, i/COLLISION_PRECISION);
if (PointInsideRect(testPos, paddleRect))
{
ball.position = testPos;
// Do any collision reactions
break;
}
}
在本例中,您将检查从球在最后一个帧的位置到当前的位置是否有碰撞,以及这些点之间的一些点等于COLLISION_PRECISION。COLLISION_PRECISION越高,球通过桨的机会就越小。
编辑:我忘了提到,这是伪代码,你不应该复制,粘贴它或任何东西,这只是一个大纲,你必须做什么。
https://gamedev.stackexchange.com/questions/87808
复制相似问题