我正在用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