アニメーションの上限を 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;
}