fpsの表示


~どのくらい速い?~




■fps って何?

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





もどる

imagire@gmail.com