(Java)球以现实的方式反弹桨

时间:2015-09-23 00:09:27

标签: java bounce

所以我想做一个简单的比赛,我需要球从球拍上反弹。现在我让球在窗户周围弹跳很好,但是它穿过了桨,我很难以一种逼真的方式从桨上反弹。 这是我的代码,它使球从墙壁反弹,并且它完美地运作:

//advance the ball
            ball.advance();
            //check if ball should bounce off canvas sides
            if(ball.getCenterX()+ ball.getRadius() > canvas.getWidth()) ball.setDirectionX(LEFT);
            if(ball.getCenterX() - ball.getRadius() <0) ball.setDirectionX(RIGHT);

            if(ball.getCenterY()+ ball.getRadius() > canvas.getHeight()) ball.setDirectionY(UPWARDS);
            if(ball.getCenterY() - ball.getRadius() < 0) ball.setDirectionY(DOWNWARDS);

问题是我不确定是否应修改这些if语句或添加更多,我不确定如何使球从球拍中正确反弹。我尝试添加几个if语句,我得到的最好的是:GIF of game我添加的语句是:

if(ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY()) ball.setDirectionY(UPWARDS); if(ball.getCenterY()+ ball.getRadius() < paddle.getTopLeftX()) ball.setDirectionY(DOWNWARDS);

感谢您提供的任何帮助:)

1 个答案:

答案 0 :(得分:0)

我相信当 X和Y 坐标到达球拍时,你需要球反弹。

目前,您只是使用ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY(),因此如果球位于X轴的球拍附近并不重要。

尝试这样的事情。

(根据<的值从左向右移动时是增加还是减少,您可能需要调整>X

boolean bounceInY = ball.getCenterY()+ ball.getRadius() > paddle.getTopLeftY();
boolean bounceInX = (ball.getCenterX()+ ball.getRadius() > paddle.getTopLeftX()) && (ball.getCenterX()+ ball.getRadius() < paddle.getTopLeftX() + paddle.getWidth());
if (bounceInY && bounceInX) ball.setDirectionY(UPWARDS);