6
我试图为我的pong游戏实现简单的连续碰撞检测,但是我不确定我正在执行或理解此权限。 AFAIR连续碰撞检测用于可能通过另一个物体的快速移动物体,从而绕过正常的碰撞检测。2D连续碰撞检测
那么我想是因为只有快速移动的物体我有一个球我只需要球的位置,它的移动速度,并且我们是在比较对象的位置。
从这个我想这将是最好的,例如如果球的移动速度表示,它正在向左移动,我会比较它的最左边的结合到最右边界其他物体。从这里我将通过将移动速度添加到球的最左边界并进行比较以确保其大于其他对象的右边界。这将表明没有左右碰撞。
我有事有些工作,但遗憾的是,球开始了一段时间,通常反弹则充当如果它击中桨时,无所不有。
我有点失落,任何帮助,将不胜感激!
static bool CheckContinuousCollision(PActor ball, PRect ballRect, PActor other, PRect otherRect)
{
PVector ballMoveSpeed;
int ballXLimit;
int ballYLimit;
ballMoveSpeed = ball.moveSpeed;
// We are moving left
if (sgn(ball.moveSpeed.x) < 0)
{
ballXLimit = std.math.abs(ballMoveSpeed.x)/2;
for (int i = 0; i <= ballXLimit; i++)
{
if (ballRect.Left < otherRect.Right && otherRect.Left < ballRect.Left)
{
return true;
}
ballRect.Left -= i;
}
}
//We are moving right
if (sgn(ball.moveSpeed.x) > 0)
{
ballXLimit = std.math.abs(ballMoveSpeed.x)/2;
for (int i = 0; i < ballXLimit; i ++)
{
if (ballRect.Right > otherRect.Left && ballRect.Right < otherRect.Right)
{
return true;
}
ballRect.Right += i;
}
}
// we are not moving
if (sgn(ball.moveSpeed.x) == 0)
{
return false;
}
}
哦,你是对的!我一直在努力工作太久。我忘记了不检查Y尺寸的副作用。 – RedShft 2012-03-09 04:34:51