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 に文字列を渡します。