为什么hitTestObject会后期检测到碰撞?

时间:2013-01-29 21:40:10

标签: actionscript-3 actionscript collision

我正在制作这个快速乒乓球游戏并使用hitTestObject来检查碰撞。应该不是问题,因为无论如何一切都是矩形的。矢量中的每个球都在检查它是否每帧都与桨叶相撞。为什么每个球都不会触发碰撞直到它到达中途?我不能比enter_frame更频繁地调用函数,或者我可以吗?我觉得它的更新速度还不够快。

if (ball[i].hitTestObject(paddle)){

     // Flip
     ball[i] *= -1;
}

快速图片:

enter image description here

2 个答案:

答案 0 :(得分:3)

我会假设它是因为当你进行命中测试时球的位置,因为它只检查瞬间位置而不是平滑的移动线。换句话说,如果在一个框架上球的边缘距离桨叶5px,则命中测试将是假的。如果球在下一帧上移动8px,则命中测试将为真,但球的边缘将是3px。

当我有一个像这样的简单扁平边缘进行测试时,我倾向于沿着这些线做某事(给定一个带有speedYradius变量的球,paddle.y ==桨的前缘):

if (ball.y + ball.radius > paddle.y) {
    // Mirror the ball's speed
    ball.speedY *= -1;

    // Mirror the ball's location as if it had bounced on the edge
    // by moving it back by the same distance it went past.
    ball.y -= (ball.y + ball.radius - paddle.y) * 2;
}

答案 1 :(得分:0)

你需要做的是更新球的位置,使其在发生碰撞时靠在桨的边缘。

你现在遇到的问题是,如果你的球以每帧12个像素的距离行进并且距离球棒2个像素,球将在下一帧绕过球棒边缘10个像素并给出你看到的视觉效果。

if( /* your hit detection */ )
{
    // Move the ball so that it's sitting against the paddle here.
    //
}