我正在寻找最好的方法,让一个循环在游戏中有延迟。
是Thread.sleep(...);
还是只检查自上次打勾以来经过的时间?
我听说Thread.sleep(...)
是不准确的。
答案 0 :(得分:0)
通常,如果你在游戏的帧之间延迟,Thread.sleep
就可以了。
您可以使用它,同时调用System.currentTimeMillis()
来决定在帧之间延迟的时间。
示例:
while(!quit) {
long beginTime = System.currentTimeMillis();
update();
render();
long timeTaken = System.currentTimeMillis() - beginTime;
long sleepTime = DELAY_PERIOD - timeTaken;
if (sleepTime >= 0) {
try{Thread.sleep(sleepTime);} catch(InterruptedException e){}
}
}
其中DELAY_PERIOD
是您希望帧占用的总毫秒数。此外,除非您专门对应用程序进行编程以使用中断,否则您不需要处理InterruptedException
。
此示例允许延迟长度根据update()
和render()
函数所花费的时间而变化。如果更新或呈现的时间超过DELAY_PERIOD
,则它不会等待。