我注意到一些非常奇怪的事情(最终导致我的游戏崩溃),Thread.sleep()
我无法弄清楚问题可能是什么。我已经连续运行了两个小时以下方法,输出始终为 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();
}
}
编辑:问题?delta 正在“泄漏”,因为内部方法(在睡眠之前)几乎不使用任何时间(如sleep(100)
测试所证明的那样),我希望 delta 非常精确,波动很小甚至没有波动,但它会不断增长。