所以我想做一个简单的比赛,我需要球从球拍上反弹。现在我让球在窗户周围弹跳很好,但是它穿过了桨,我很难以一种逼真的方式从桨上反弹。 这是我的代码,它使球从墙壁反弹,并且它完美地运作:
//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);
感谢您提供的任何帮助:)
答案 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);