Oli*_*ver 1 java physics bounce
我有一个带有以下变量的球类:
int x,y,width,height;
double velX,velY;
Run Code Online (Sandbox Code Playgroud)
我想这样做,以便每当球击中一个阻挡时,它会反弹并且会失去一些速度.
//Gravity & movement for the ball
ball.setVelY(ball.getVelY() + 0.2);
ball.setY((int)(ball.getY() + ball.getVelY()));
//Make the ball bounce.
if(ball.getBounds().intersects(block.getBounds()){
ball.setVelY(ball.getVelY() * -0.7);
}
Run Code Online (Sandbox Code Playgroud)
我认为这会使球慢慢反弹,直到它完全移动大麦(我会测试然后让球完全停止),但事实并非如此.球会正常弹跳几次,每次弹跳都小于之前的弹跳.然而,在几次反弹之后,球将比之前的反弹更低地弹跳.为什么这是我应该怎么做才能解决它?
这里的问题是你基本上是对球施加小的力量.即使你正在缩小势头,你也会不断增加这个0.2球的动力值.
作为一个类比,你通过定期施加重力来做的是在短时间内向下击球,从而给它带来动力.如果您想象一个仍然在地面上或稍微高于地面的篮球,并且您开始快速点击它,则可以使球反弹.但是,如果你想象用你的手向球施加恒定的向下力(就像真正的重力一样),那么球将无法反弹.
由于不可能让你的程序以连续的方式运行,可以这么说,你必须找到解决这个问题的方法.一种解决方案是在与地板撞击时简单地检查动量的最小阈值,并且如果它低于该阈值,则将其动量设置为0,并将其设置为使其与表面一起使用.
| 归档时间: |
|
| 查看次数: |
318 次 |
| 最近记录: |