0

私はprocessing.jsを使用して基本的なPongクローンに取り組んできました。現在、私は2人のプレーヤーが制御するパドル間で前後にバウンドできるボールを持っています。私の問題は、ボールとパドルの間の衝突を検出するための私のアルゴリズムがボールを反転させますが、右端のパドルに非現実的なギャップを残すことです。私が衝突検出に使用している方法は次のとおりです。

    /*
     * Collision detection
     */
     void Collide(PongBall ball, Paddle pPaddle)
     {

        float paddleX = pPaddle.x;

        if(ball.directionX == -1)
        {
            //moving backwards
            float paddleFront = pPaddle.x + pPaddle.width + ball.mass/2; 
            float paddleBack = pPaddle.x;


            if( (ball.x <= paddleFront && ball.x >= paddleBack)
               && (ball.y >= pPaddle.y - pPaddle.height - ball.mass)
               && (ball.y <= pPaddle.y + pPaddle.height + ball.mass))
            {
                //contact with paddle
                debugger;
                ball.velocity.x *= -1;
                ball.directionX *= -1;
            }  
        }
        else if(ball.directionX == 1)
        {
            //moving forwards
            float paddleFront = pPaddle.x - pPaddle.width - ball.mass/2; 
            float paddleBack = pPaddle.x;


            if( (ball.x >= paddleFront && ball.x <= paddleBack)
               && (ball.y >= pPaddle.y - pPaddle.height - ball.mass)
               && (ball.y <= pPaddle.y +pPaddle.height + ball.mass))
            {
                debugger;
                ball.velocity.x *= -1;
                ball.directionX *= -1;
            }  
        }
     }

コード/例全体は、ここのjsfiddleにあります。

paddleBack右端のパドルの値を計算するための値を削除するball.mass/2などして値を調整し、衝突が見栄えが良くなるようにすることができますが、左側の衝突の計算がそれと異なるのはなぜですか?右側に?前もって感謝します。

4

1 に答える 1

0

予感がした

        //moving forwards
        float paddleFront = pPaddle.x - pPaddle.width + ball.mass/2; 
        float paddleBack = pPaddle.x;

違い+ ball.mass/2を生む代わりに- ball.mass/2

于 2013-03-20T18:37:53.157 に答える