我有一个圆形动态的身体模拟一个弹跳球,我将恢复原状设置为2,它只是失去控制,它不会停止上下弹跳。所以我想使用阻尼减慢球的线性或角速度。
if(ball.getLinearVelocity().x >= 80 || ball.getLinearVelocity().y >= 80)
ball.setLinearDamping(50)
else if(ball.getLinearVelocity().x <= -80 || ball.getLinearVelocity().y <=-80)
ball.setLinearDamping(50);
当球的线速度达到80或以上时,我将其线性阻尼设置为50,然后它就会超级慢动作。有人可以解释一下阻尼如何工作以及如何正确使用.setLinearDamping()
方法,谢谢。
修改
这就是我所做的,如果线速度超出了我的需要,它将球线性阻尼设置为20,如果不总是设置为0.5f。这会产生并影响重力不断变化的瞬间变化。但是@ minos23答案是正确的,因为它更自然地模拟球,你只需要设置你需要的MAX_VELOCITY。
if(ball.getLinearVelocity().y >= 30 || ball.getLinearVelocity().y <= -30)
ball.setLinearDamping(20);
else if(ball.getLinearVelocity().x >= 30 || ball.getLinearVelocity().x <= -30)
ball.setLinearDamping(20);
else
ball.setLinearDamping(0.5f);
答案 0 :(得分:2)
这是我用来限制身体速度的方法:
if(ball.getLinearVelocity().x >= MAX_VELOCITY)
ball.setLinearVelocity(MAX_VELOCITY,ball.getLinearVelocity().y)
if(ball.getLinearVelocity().x <= -MAX_VELOCITY)
ball.setLinearVelocity(-MAX_VELOCITY,ball.getLinearVelocity().y);
if(ball.getLinearVelocity().y >= MAX_VELOCITY)
ball.setLinearVelocity(ball.getLinearVelocity().x,MAX_VELOCITY)
if(ball.getLinearVelocity().y <= -MAX_VELOCITY)
ball.setLinearVelocity(ball.getLinearVelocity().x,-MAX_VELOCITY);
请在 render()方法中尝试此代码,这将限制您正在制作的球体速度
祝你好运答案 1 :(得分:1)
你的代码设置了强烈的线性阻尼,但从不释放它,因此当球达到特定的速度时,它将切换到它的行为方式,就像它被胶合一样。
我宁愿通过在每一帧中检查并重置它来限制最大速度:
float maxLength2 = 80*80;
Vector2 v = ball.getLinearVelocity();
if (v.len2() > maxLength2) {
v.setLength2(maxLength2);
}
当物体移动得不太快时,线性阻尼会模仿称为drag的现象。它基本上由每个时刻的以下等式描述:
dragInducedForce = -dragCoefficient * velocity;