Java游戏更新慢了几秒

Java game slow update for a few seconds

我正在制作一个 game of life 克隆,(你知道,只是为了好玩)我在更新(勾选)方法方面遇到了一点问题。

这是更新和渲染循环:

while (running) {
    double nsTick = 1000000000 / amountOfTicks;

    long now = System.nanoTime();
    deltaRender += (now - lastTime) / nsRender;
    deltaTick += (now - lastTime) / nsTick;
    lastTime = now;

    while (deltaRender >= 1){
        render();
        frames++;
        deltaRender--;

        if (tickRunning) {
            while(deltaTick >= 1) {
                tick();
                ticks++;
                deltaTick--;
            }
        }

        if (System.currentTimeMillis() - timer > 1000){
            timer += 1000;
            System.out.println("Ticks: " + ticks);
            frames = 0;
            ticks = 0;
        }
    }
}

stop();

如您所见,我将渲染和刻度功能分开了,因为刻度的速率由用户实时控制。

问题是,当游戏开始时,(或未暂停),tick 的更新率不稳定几秒钟(大约 10),然后调整到正确的。可以修复吗?

游戏当前在单线程上运行。

等等,我做了一些不同的事情(也许这就是你的意思)。这是代码:

while(deltaTick >= 1){
   deltaTick--;
   if(tickRunning){
       tick();
       ticks++;         
   }
}

鼠标有点反应迟钝,以前有过,但我想那是以前的事。非常感谢!

问题似乎是当你在暂停游戏时,你仍然在计算你要执行的tick()s(即deltaTick继续增加);这些堆积起来的 tick() 会在游戏恢复时立即执行。这里有多种解决方案;一种是在游戏暂停时暂停增加 deltaTick

if (tickRunning) {
    deltaTick += (now - lastTime) / nsTick;
}

另一种方法是在您恢复或开始游戏时简单地将 deltaTick 设置为 0