让球反弹停止

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)

我认为这会使球慢慢反弹,直到它完全移动大麦(我会测试然后让球完全停止),但事实并非如此.球会正常弹跳几次,每次弹跳都小于之前的弹跳.然而,在几次反弹之后,球将比之前的反弹更低地弹跳.为什么这是我应该怎么做才能解决它?

Nic*_*rth 7

这里的问题是你基本上是对球施加小的力量.即使你正在缩小势头,你也会不断增加这个0.2球的动力值.

作为一个类比,你通过定期施加重力来做的是在短时间内向下击球,从而给它带来动力.如果您想象一个仍然在地面上或稍微高于地面的篮球,并且您开始快速点击它,则可以使球反弹.但是,如果你想象用你的手向球施加恒定的向下力(就像真正的重力一样),那么球将无法反弹.

由于不可能让你的程序以连续的方式运行,可以这么说,你必须找到解决这个问题的方法.一种解决方案是在与地板撞击时简单地检查动量的最小阈值,并且如果它低于该阈值,则将其动量设置为0,并将其设置为使其与表面一起使用.