Java游戏缓慢更新几秒钟

时间:2016-03-13 17:50:43

标签: java game-engine

我正在制作一个game of life克隆,(你知道,只是为了好玩)而且我对更新(tick)方法有点问题。

这是更新和渲染循环:

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秒)具有不稳定的更新速率,然后调整到正确的更新速率。可以修复吗?

游戏目前在一个线程上运行。

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

从时间上来看,鼠标有点反应迟钝,但我认为之前有过。非常感谢!