1. ホーム
  2. java

[解決済み] GameLoop、Deltaに何を入れるか?

2022-03-07 13:31:32

質問

ちょっと気になったのですが、デルタは具体的に何を入れるのでしょうか?パラメータ double delta は(開発者が述べているように、ロジック更新の秒数で)。もし、1秒間に20回ループさせたかったら、0.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つのロジックループの基準となる時間をミリ秒単位で入力します。

1秒間に20回なら、1/20秒となり、0.2ではなく0.05となります。

1.0 / 20" と書くと、変換の手間が省け、20を周波数に置き換えるだけで済むので、より直感的に書けます(IMO)。