1

我正在制作这个快速乒乓球游戏并使用 hitTestObject 检查碰撞。应该不是问题,因为无论如何一切都是矩形的。向量中的每个球都在检查它是否每帧都与桨发生碰撞。为什么每个球直到它通过它大约一半才触发碰撞?我不能比 enter_frame 更频繁地调用函数,或者我可以吗?我只是似乎它的更新速度不够快或其他什么。

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

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

快速图片:

在此处输入图像描述

4

2 回答 2

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;
}
于 2013-01-29T22:33:07.990 回答
0

你需要在这里做的是更新球的位置,这样一旦发生碰撞,它就会靠在桨的边缘。

您目前遇到的问题是,如果您的球以每帧 12 像素的速度行进并且距离球棒 2 像素,那么球将在下一帧绕过球棒边缘 10 像素并为您提供视觉效果你看到的结果。

if( /* your hit detection */ )
{
    // Move the ball so that it's sitting against the paddle here.
    //
}
于 2013-01-29T22:34:11.050 回答