制作java游戏循环的最有效方法

时间:2018-05-05 18:23:20

标签: java loops delay infinite-loop

我正在寻找最好的方法,让一个循环在游戏中有延迟。 是Thread.sleep(...);还是只检查自上次打勾以来经过的时间? 我听说Thread.sleep(...)是不准确的。

1 个答案:

答案 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,则它不会等待。