2. FPSを表示する。
FPSとはframe par secondの略で、1秒間に何フレーム表示しているかというものです。
先ほど、1秒間に60回処理を行うように、設定しましたが、本当にそうなっているか、表示してみます。≒
1回1回、時間を取得して表示するとものすごい早さで表示されてしまうので、
50周分の時間を測定して平均を求めます。
処理1周目の時の時間を取得しておき、50周目の時の時間を取得します。
50周目の時間 - 1周目の時間
を計算すると、処理が50周した時間が測定できます。ここからfpsを求めていきましょう。
サンプルはこれからのために「main.cpp」という名前のファイルで行ってください。
//素材必要なし
#include "DxLib.h" int counter=0,FpsTime[2]={0,},FpsTime_i=0; int color_white; double Fps=0.0; char Key[256]; void SetColor(){ color_white = GetColor(255,255,255); //白色ハンドルを取得 return; } void FpsTimeFanction(){ if(FpsTime_i== 0) FpsTime[0]=GetNowCount(); //1周目の時間取得 if(FpsTime_i==49){ FpsTime[1]=GetNowCount(); //50周目の時間取得 Fps = 1000.0f / ((FpsTime[1] - FpsTime[0]) / 50.0f);//測定した値からfpsを計算 FpsTime_i=0;//カウントを初期化 } else FpsTime_i++;//現在何周目かカウント if(Fps != 0) DrawFormatString(565,460,color_white,"FPS %.1f",Fps); //fpsを表示 return; } int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ){ int RefreshTime=0; ChangeWindowMode( TRUE ) ; if( DxLib_Init() == -1 ) return -1; SetDrawScreen( DX_SCREEN_BACK ) ; //裏画面を使用する。 SetColor(); //色を取得する while(ProcessMessage() == 0 && GetHitKeyStateAll(Key) == 0){ RefreshTime = GetNowCount(); //今の時間を取得 ClearDrawScreen(); //裏画面のデータを全て削除 FpsTimeFanction(); ScreenFlip() ; //裏画面データを表画面へ反映 counter++; if(Key[KEY_INPUT_ESCAPE]==1) break; //Escapeが押されたら終了 while(GetNowCount() - RefreshTime < 17);//1周の処理が17ミリ秒になるまで待つ } DxLib_End() ; return 0 ; }
実行結果
DXライブラリ著作権表示
DX Library Copyright (C) 2001-2006 Takumi
Yamada.