1

有一个弧线可以检测底部物体的位置。这条弧线或球在第二次反弹之前反弹得很好,并在地板上出现故障。该变量ball.gSy控制球下落的速度。现在它被乘以 10 ( ball.y += 10*ball.gSy;) 以加速地板上的故障效果。另外,你可以使用方向键来控制球,它确实会卡在侧壁上,但我特别好奇的是底层问题。

这是一个 jsfiddle 链接,可以更好地满足您的惠顾:http: //jsfiddle.net/nhQtk/

4

1 回答 1

1

您的问题是您将球向下移动,但是当发生碰撞时,您并没有将球向上移动到没有卡在地板上的位置。

因此,您正确地检测到了碰撞,但您的球已经部分穿过墙壁并且无法向上移动。

以下是您需要做什么的粗略想法:

 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.   

                       }
于 2012-07-09T05:50:07.327 回答