因此,我有一个球员身体+固定装置等,它实际上是一个反弹的球。
我想检测何时“差不多”完成移动。
目前,我这样做:
public Boolean isStopped() {
return body.getLinearVelocity().x <= 0.3f && body.getLinearVelocity().y <= 0.3f;
}
这主要是可行的,问题是当玩家击中某物时,有一秒钟的速度为0,因此返回true。我真正想要的是在基本完成后才返回true。最好在一个范围内,当我调整游戏世界的物理状态时,可以设置为自己喜欢的范围。
我不能检查它是否正在睡觉,因为来得太晚了,直到它停止对它施加作用力之后它才进入睡眠状态,我需要在此之前。
我可以存储它已停止多长时间/已停止的步骤数,但是我希望会有一种我错过的很好的现有方法。
有任何想法吗?
最佳答案
您可以跟踪最近的移动并通过在每个时间步中混合一些当前速度来对其进行更新:
float speedNow = body.getLinearVelocity().len();
recentSpeed = 0.1 * speedNow + 0.9 * recentSpeed;
if ( recentSpeed < someThreshold )
... do something ...
首先,您需要将
recentSpeed
设置为适当的高值,否则在第一步中它可能会低于阈值。