我一直在使用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
值的值,以便缓和该值以使碰撞看起来更好,但我想了解,为什么左侧碰撞的计算与右侧的碰撞计算不同?
提前谢谢。
答案 0 :(得分:0)
我有预感
//moving forwards
float paddleFront = pPaddle.x - pPaddle.width + ball.mass/2;
float paddleBack = pPaddle.x;
+ ball.mass/2
而不是- ball.mass/2
产生了差异