Tom*_*eld 5 java android box2d jbox2d libgdx
所以,我有一个球员身体 + 固定装置等,它本质上是一个弹跳的球。
我想检测它何时“几乎”完成移动。
目前我这样做:
public Boolean isStopped() {
return body.getLinearVelocity().x <= 0.3f && body.getLinearVelocity().y <= 0.3f;
}
Run Code Online (Sandbox Code Playgroud)
这主要是有效的,问题是当玩家击中某物时,有一瞬间其速度为 0,因此返回 true。我真正想要的是在基本完成时返回 true 。最好在我调整游戏世界物理时可以设置为任何我喜欢的范围内。
我不能检查它是否在睡觉,因为这来得太晚了,直到它停止对它施加力量之后它才会睡觉,我需要之前。
我可以只存储停止的时间/停止的步骤数,但我希望有一个很好的预先存在的方法,但我错过了。
有任何想法吗?
您可以跟踪最近的运动并通过在每个时间步中混合一些当前速度来更新它:
float speedNow = body.getLinearVelocity().len();
recentSpeed = 0.1 * speedNow + 0.9 * recentSpeed;
if ( recentSpeed < someThreshold )
... do something ...
Run Code Online (Sandbox Code Playgroud)
您需要recentSpeed首先设置为适当高的值,否则它可能会低于第一个时间步长的阈值。