我正在用 Java 编写一个模拟,其中对象在牛顿物理学下起作用。一个物体可能会被施加一个力,并且产生的速度会导致它在屏幕上移动。模拟的性质意味着对象以离散的步骤移动,具体取决于动画循环的当前迭代和上一次迭代之间经过的时间;例如
public void animationLoop() {
long prev = System.currentTimeMillis();
long now;
while(true) {
long now = System.currentTimeMillis();
long deltaMillis = now - prev;
prev = now;
if (deltaMillis > 0) { // Some time has passed
for (Mass m : masses) {
m.updatePosition(deltaMillis);
}
// Do all repaints.
}
}
}
如果动画线程以某种方式延迟导致大量时间流逝(典型情况是在 Windows 下单击并按住最小化/最大化防止重绘),则会出现问题,这会导致对象以惊人的速度移动。我的问题:有没有办法确定在动画线程中花费的时间而不是挂钟时间,或者任何人都可以建议一种解决方法来避免这个问题?
到目前为止,我唯一的想法是限制deltaMillis
某个上限。