1

とにかく、これはいつもの話で、私の非常に単純なゲームで、それを実行するすべての Windows マシンで同じ速度を保証しようとして、私を怒らせています。1/60 値を指定することでそれを行い、最後に呼び出されてからその値が経過するまでフレームが実行されないようにします。私が抱えている問題は、何らかの理由で 1/60 が 30hz に等しいことです。60hz を取得するには、1/120 に設定する必要があります。また、60hz の強打ではなく、少し高速です。

ここに貼り付けたら、何か問題があるかどうか教えてもらえますか? またはそれを行うためのより正確な方法はありますか?

float controlFrameRate = 1./60 ;

while (gameIsRunning)
{
    frameTime += (system->getElapsedTime()-lastTime);
    lastTime = system->getElapsedTime();

    if(frameTime > controlFrameRate)
    {
        gameIsRunning = system->update();
        
        //do stuff with the game

        frameTime = .0f;                   
    }
} 
4

1 に答える 1

3

2 回コールしないでくださいgetElapsedTime。2 回のコールにはわずかな違いがある場合があります。代わりに、その値を保存してから再利用してください。また、frameTime を 0 に設定する代わりに、そこから controlFrameRate を減算します。こうすると、1 つのフレームが少し長くなると、次のフレームが少し短くなってそれを補います。

while (gameIsRunning)
{
    float elapsedTime = system->getElapsedTime();

    frameTime += (elapsedTime-lastTime);
    lastTime = elapsedTime;

    if(frameTime > controlFrameRate)
    {
        gameIsRunning = system->update();

        //do stuff with the game

        frameTime -= controlFrameRate;
    }
}

レートを 1/120 に設定しなければならないという問題についてよくわかりません。ここで使用しているタイミング API は何ですか?

于 2012-06-03T20:43:29.720 に答える