fps 値 とは、frames per second、つまり一秒間に画面を更新した回数です。 この回数が多いと、ゲームが滑らかに動きます。 TV は、通常 60fps で更新され、30fps より小さいと、動きがガタガタします。 アクションゲームなら、60fps 程度、RPGなら 30fps を心がけましょう。
今回のプログラムは、下のものです。マルチメディアタイマーを使いますので、 winmm.lib をリンクのライブラリモジュールに追加してください。
文字列表示用に用意した変数は次のとおりです。 この関数 BeginScene と EndScene の間で、毎フレーム呼び出します。
// ----------------------------------------------------------------------------
// Name: fps_disp()
// Desc: フレーム数の表示
//-----------------------------------------------------------------------------
#include <stdio.h>
static void fps_disp()
{
static DWORD last = timeGetTime();
static DWORD frames = 0;
static char buf[256] = "";
DWORD current;
current = timeGetTime();
frames++;
if(500 <= current - last) {// 0.5秒毎に更新
float dt = (float)(current - last) / 1000.0f;
float fps = (float)frames / dt;
last = current;
frames = 0;
sprintf(buf, "%.02f fps", fps);
}
sFont.Print(buf, 0,0);
}
マルチメディアタイマーの timeGetTime() で現在時刻を調べます。
timeGetTime() は、1/1000秒単位の精度を持ちます。
毎フレーム計算しても負荷になるだけなので、500ms (0.5秒) ごとに計算します。
fps の計算方法は、時間あたりの更新数ですから、更新回数を経過時間(を秒で換算したもの)で割ります。
後は、次の計算のために、時間を保存して、フレーム数をクリアします。
そして、表示のために、前回の CMyFont に文字列を渡します。