我正在用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
。
旋盖三角洲似乎是一个很好的解决方案给我。 – 2010-04-14 12:05:01