私は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
、いくつかの上限によって制約することです。