有一个弧线可以检测底部物体的位置。这条弧线或球在第二次反弹之前反弹得很好,并在地板上出现故障。该变量ball.gSy
控制球下落的速度。现在它被乘以 10 ( ball.y += 10*ball.gSy;
) 以加速地板上的故障效果。另外,你可以使用方向键来控制球,它确实会卡在侧壁上,但我特别好奇的是底层问题。
这是一个 jsfiddle 链接,可以更好地满足您的惠顾:http: //jsfiddle.net/nhQtk/
有一个弧线可以检测底部物体的位置。这条弧线或球在第二次反弹之前反弹得很好,并在地板上出现故障。该变量ball.gSy
控制球下落的速度。现在它被乘以 10 ( ball.y += 10*ball.gSy;
) 以加速地板上的故障效果。另外,你可以使用方向键来控制球,它确实会卡在侧壁上,但我特别好奇的是底层问题。
这是一个 jsfiddle 链接,可以更好地满足您的惠顾:http: //jsfiddle.net/nhQtk/
您的问题是您将球向下移动,但是当发生碰撞时,您并没有将球向上移动到没有卡在地板上的位置。
因此,您正确地检测到了碰撞,但您的球已经部分穿过墙壁并且无法向上移动。
以下是您需要做什么的粗略想法:
ball.y += 10*ball.gSy;
for(var i = 0; i < objects.length; i++){
if(ball.x > objects[i].x - ball.r &&
ball.y > objects[i].y - ball.r &&
ball.x < ball.r + objects[i].x + objects[i].w &&
ball.y < ball.r + objects[i].y + objects[i].h)
{
ball.gSy = (-1 * ball.gSy);
ball.y -= 10;// <--- important step
// You need to calculate how much to move the ball BACK up to where it has not quite hit the floor.
}