首页 文章

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

提问于
浏览
0

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

//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

    我相信当 both X and 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);
    

相关问题