1

下のオブジェクトがどこにあるかを検出するアークがあります。この弧、またはボールは、2 回目のバウンドまでうまくバウンドし、床にグリッチします。変数ball.gSyは、ボールが落ちる速度を制御します。現在ball.y += 10*ball.gSy;、床のグリッチの影響をスピードアップするために 10 ( ) を掛けています。また、矢印キーを使用してボールを制御することもでき、ボールが側壁に引っかかることもありますが、私が特に気になっているのは最下層の問題です。

後援をより満足させるための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 に答える