我正在制作这个快速乒乓球游戏并使用hitTestObject来检查碰撞。应该不是问题,因为无论如何一切都是矩形的。矢量中的每个球都在检查它是否每帧都与桨叶相撞。为什么每个球都不会触发碰撞直到它到达中途?我不能比enter_frame更频繁地调用函数,或者我可以吗?我觉得它的更新速度还不够快。
if (ball[i].hitTestObject(paddle)){
// Flip
ball[i] *= -1;
}
快速图片:
答案 0 :(得分:3)
我会假设它是因为当你进行命中测试时球的位置,因为它只检查瞬间位置而不是平滑的移动线。换句话说,如果在一个框架上球的边缘距离桨叶5px,则命中测试将是假的。如果球在下一帧上移动8px,则命中测试将为真,但球的边缘将是3px。
当我有一个像这样的简单扁平边缘进行测试时,我倾向于沿着这些线做某事(给定一个带有speedY
和radius
变量的球,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.
//
}