0

私はゲームを作っています、そして、要件はそれが少なくとも30FPSを持っているようにすることであり、そして下に落ちてはいけません。私が以下に持っているものはこれを達成しますか?それとも私はどこかにいますか?多くの助けをいただければ幸いです。

private long period = 6 * 1000000;
private static final int DELAYS_BEFORE_YIELD = 5;
long before, after, difference, sleep, oversleep = 0;
int delays = 0;
while (running)
{
    before = System.nanoTime();
    after = System.nanoTime();
    difference = after - before;
        if (sleep < period && sleep > 0)
    {
    try
    {
        Thread.sleep(sleep / 35000L);
        oversleep = 0;
    }
    catch (InterruptedException e)
    {

    }
    }
    else if (difference > period)
    {
    oversleep = difference - period;
    }
    else if (++delays >= DELAYS_BEFORE_YIELD)
    {
    Thread.yield();
    oversleep = 0;
    delays = 0;
    }
    else
    {
    oversleep = 0;
    }
}
4

2 に答える 2

2

フレームレートの上限を設定することはできますが、常に従うことが保証されている下限を設定することはできません。

関数を1秒間に30回以下呼び出すようにすることはできますが、1秒間に少なくとも30回呼び出されるかどうかはわかりません。30 fpsでは、スレッド間で分散される時間は0.03秒であり、通常、描画はスレッド間で最も重くなります(AIなどの複雑な操作がある場合を除きますが、レートを下げるか、可能なことを事前に計算することで解決する必要があります)事前計算されます)。

その場合time of draw + time of logic > 0.03、ゲームを少なくとも30fpsで実行する方法はありません。

于 2012-12-10T01:29:26.310 に答える
0

タイマーを使うほうがいいと思うので、早めに質問しているのは良いことだと思います。そして、それは物事を裏返しにします。(しかし、それはあなたのやり方で行うことができます。)

この無回答で申し訳ありませんが、それは価値のあるアドバイスだと思います。

それらのアプローチについては、いくつかのゲーム/アニメーションフレームワークを調べてください。

于 2012-12-10T01:24:44.883 に答える