我一直在使用 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
,以减轻该值,使碰撞看起来更好,但我想了解,为什么左侧碰撞的计算与那个不同在右侧?先感谢您。