Hi,
In my main loop I check the average frame rate of my animation and based on this, I skip 1, 2 or 3 frames each 5 frames.
The code how I do this is shown below, but I can't imagine that there isn't an easier way to code this. Any suggestions?
(Ps.: it's all based on a animation recorded for 50 fps)
frameTime = _timer.GetFrameTime();
lastFramesTime += frameTime;
++framesPassed;
++fiveFramesPassed;
if(framesPassed == 50)
{
avgFrame = lastFramesTime / 50;
framesPassed = 0;
lastFramesTime = 0;
frameSkip = 0;
if(avgFrame < 20.0f) frameSkip = 0;
if(avgFrame > 20.0f && avgFrame < 25.0f) frameSkip = 1;
if(avgFrame > 25.0f && avgFrame < 33.3f) frameSkip = 2;
if(avgFrame > 33.3f && avgFrame < 50.0f) frameSkip = 3;
SetWindowTextA(_d3d.GetHwnd(), _timer.mStrFramerate);
}
frameInterval = 1;
switch(fiveFramesPassed)
{
case 3:
{
if(frameSkip == 3) frameInterval = 2;
}
break;
case 4:
{
if(frameSkip == 2) frameInterval = 2;
if(frameSkip == 3) frameInterval = 2;
}
break;
case 5:
{
if(frameSkip == 1) frameInterval = 2;
if(frameSkip == 2) frameInterval = 2;
if(frameSkip == 3) frameInterval = 2;
fiveFramesPassed = 0;
}
break;
}
// code of running the animation, later on:
if(!_scene.mCamAnimation.NextFrame(frameInterval))
{
active = false;
PostMessage(_d3d.GetHwnd(), WM_QUIT, 0, 0);
}