GameLoop,为Delta做些什么?

时间:2014-02-05 02:28:57

标签: java

我只是想知道一个简短的问题,你究竟为delta做了什么。参数double delta是(正如开发人员所说,逻辑更新的秒数)。如果我希望循环每秒运行20次,我会将它设置为.2或类似的东西吗?我对逻辑更新(以秒为单位)部分感到困惑。

无论如何,如果您想要查看所提供的游戏循环,请查看此处的页面http://entropyinteractive.com/2011/02/game-engine-design-the-game-loop/

public abstract class GameLoop
{
private boolean runFlag = false;

/**
 * Begin the game loop
 * @param delta time between logic updates (in seconds)
 */
public void run(double delta)
{
    runFlag = true;

    startup();
    // convert the time to seconds
    double nextTime = (double)System.nanoTime() / 1000000000.0;
    while(runFlag)
    {
        // convert the time to seconds
        double currTime = (double)System.nanoTime() / 1000000000.0;
        if(currTime >= nextTime)
        {
            // assign the time for the next update
            nextTime += delta;
            update();
            draw();
        }
        else
        {
            // calculate the time to sleep
            int sleepTime = (int)(1000.0 * (nextTime - currTime));
            // sanity check
            if(sleepTime > 0)
            {
                // sleep until the next update
                try
                {
                    Thread.sleep(sleepTime);
                }
                catch(InterruptedException e)
                {
                    // do nothing
                }
            }
        }
    }
    shutdown();
}

public void stop()
{
    runFlag = false;
}

public abstract void startup();
public abstract void shutdown();
public abstract void update();
public abstract void draw();
}

1 个答案:

答案 0 :(得分:0)

您输入单个逻辑循环应基于的时间(以毫秒为单位)。

如果你想要每秒20次,那么1/20秒是不是0.2而是0.05的数字。

您可以通过编写" 1.0 / 20"更直观地编写它(IMO)。然后你不必来回转换,只需用频率替换20即可。