我应该如何确定我的更新长度(增量)应该在我的 Java 游戏循环中?

How should I figure out what my update length (delta) should be in my Game loop in Java?

考虑这个游戏循环:

        double nextTime = (double)System.nanoTime() / 1000000000.0;
        while(runFlag)
        {
            double currTime = (double)System.nanoTime() / 1000000000.0;
            if(currTime >= nextTime)
            {
                nextTime += delta;
                update();
                draw();
            }
            else
            {
                int sleepTime = (int)(1000.0 * (nextTime - currTime));
                if(sleepTime > 0)
                {
                    try
                    {
                        Thread.sleep(sleepTime);
                    }
                    catch(InterruptedException e)
                    {
                    }

我应该如何计算一个合适的增量值(下一次更新和渲染之前必须经过的时间)。我已经看到它是用不同的方式计算的,但我仍然不确定到底是怎么回事或到底是怎么回事。这是一个固定的时间步长循环,例如,如果我想计算 60 帧中 30 帧的 恒定 fps 的增量,我必须将其设置为 为什么?我无法理解我在互联网上遇到的一些解释。谢谢

如果您想要每秒产生特定的帧率,请考虑以下因素:

  1. 您想每 1/frames-per-second 秒生成一个新帧。
  2. 生成帧(处理中)可能需要 p
  3. 帧制作之间的 "free time",delta,将是 1/frames-per-second - p

您可以使用以下伪代码:

frameTimeMilliseconds = 1000 / frames-per-second

Loop(condition) {
  startFrameTime = system current time in milliseonds
  do frame production
  endFrameTime = system current time in milliseconds
  sleepTime = frameTimeMilliseconds - (endFrameTime - startFrameTime)

  sleep for sleepTime milliseconds
}

您可能希望处理实际帧生成时间长于所需帧生成时间的情况(即 sleepTime is <= 0