设计fps限制器

时间:2013-07-09 17:42:02

标签: c++ graphics directx directx-9

我尝试将动画限制为30 fps。所以我设计了下面的功能来实现目标。不幸的是,当我设置60 fps(DirectX上限游戏应用程序默认为60 fps)时,动画的行为不如没有条件检查setFPSLimit()函数那么快。我应该如何修复它以使其工作?

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;
    }

0 个答案:

没有答案