非常に奇妙な (最終的にはゲームがクラッシュする) ことに気付きましたがThread.sleep()
、何が問題なのかわかりません。次のメソッドを 2 時間連続で実行しましたが、出力は常に 100+-5 です。
public void gameLoop() {
t0 = time();
while (GameState.getInstance().getState() == GameCondition.RUNNING) {
engine.update();
sfx.play();
t1 = time();
delta = t1 - t0;
gfx.render((int) delta);
t0 = time();
System.out.println(delta);
sleep(100);
}
}
まったく同じ方法を実行すると、定数 100 の間スリープする代わりに、delta
public void gameLoop() {
t0 = time();
while (GameState.getInstance().getState() == GameCondition.RUNNING) {
engine.update();
sfx.play();
t1 = time();
delta = t1 - t0;
gfx.render((int) delta);
t0 = time();
System.out.println(delta);
sleep(delta);
}
}
そして今、出力は次のようになります。
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
2
....
After a minute
571
疲れすぎて明らかな間違いを犯したのか、それとも非常に奇妙なことが起こっているのかわかりません。これが睡眠です。
private void sleep(long milliSeconds) {
System.out.println();
try {
Thread.sleep(milliSeconds);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
編集:問題?sleep(100)
内部メソッド (スリープ前) は実質的に時間を使用しないため (テストで証明されているように)、デルタは「漏れています」。