0

我一直在使用 processing.js 进行基本的 Pong 克隆。目前我有一个可以在两个玩家控制的桨之间来回弹跳的球。我的问题是我用于检测球和桨之间碰撞的算法使球反转,但为最右边的桨留下了不切实际的间隙。我用于碰撞检测的方法如下:

    /*
     * 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 回答