在processing.js碰撞检测中减少对象之间的空间

时间:2013-03-20 18:11:53

标签: javascript collision-detection processing processing.js

我一直在使用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 here上。

我可以通过删除paddleBack等来调整最右边桨的ball.mass/2值的值,以便缓和该值以使碰撞看起来更好,但我想了解,为什么左侧碰撞的计算与右侧的碰撞计算不同? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我有预感

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

+ ball.mass/2而不是- ball.mass/2产生了差异