1

アニメーションの上限を 30 fps にしようとしています。そのため、目標を達成するために以下の機能を設計します。残念ながら、アニメーションは、setFPSLimit() 関数の条件チェックを行わないと、60 fps に設定すると動作しません (DirectX はデフォルトでゲーム アプリケーションを 60 fps に制限します)。動作させるにはどのように修正すればよいですか?

getGameTime() 関数は、ゲームアプリの起動時にストップウォッチのような時間をミリ秒単位でカウントします。

//Called every time you need the current game time
float getGameTime()
{
    UINT64 ticks;
    float time;

    // This is the number of clock ticks since start
    if( !QueryPerformanceCounter((LARGE_INTEGER *)&ticks) )
        ticks = (UINT64)timeGetTime();

    // Divide by frequency to get the time in seconds
    time = (float)(__int64)ticks/(float)(__int64)ticksPerSecond;

    // Subtract the time at game start to get
    // the time since the game started
    time -= timeAtGameStart;

    return time;
}

fps制限あり http://www.youtube.com/watch?v=i3VDOMqI6ic

void update()
{
    if ( setFPSLimit(60) )
        updateAnimation();
}

fps制限なしhttp://www.youtube.com/watch?v=Rg_iKk78ews

   void update()
    {
        updateAnimation();
    }

bool setFPSLimit(float fpsLimit)
{
    // Convert fps to time
    static float timeDelay = 1 / fpsLimit; 

    // Measure time elapsed
    static float timeElapsed    = 0;

    float currentTime = getGameTime();
    static float totalTimeDelay = timeDelay + getGameTime();

    if( currentTime > totalTimeDelay)
    {
        totalTimeDelay = timeDelay + getGameTime();
        return true;
    }
    else
        return false;
    }
4

0 に答える 0