FPS測定処理は館さんから借り手ます
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
SetWindowText("TEST");
SetOutApplicationLogValidFlag( false );
SetUseASyncChangeWindowModeFunction( true, NULL, NULL );
SetGraphMode( 640, 480, 32);
ChangeWindowMode( false );
if( DxLib_Init() == -1 ){
return ( -1 ); // エラーが起きたら直ちに終了
}
SetDrawScreen( DX_SCREEN_BACK );
//ゲームループ
while( ProcessMessage() == 0 ){
ClearDrawScreen();
draw_fps();
ScreenFlip();
fps_wait();
}
DxLib_End(); // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
}
#define FLAME 60
static void waitMs( int term );
//fpsのカウンタ、60フレームに1回基準となる時刻を記録する変数
int fps_count,count0t;
//平均を計算するため60回の1周時間を記録
int f[FLAME];
int t=0;
//平均fps
double ave;
//FLAME fps になるようにfpsを計算・制御
void fps_wait( void )
{
int term,i,gnt;
if(fps_count==0){//60フレームの1回目なら
if(t==0){//完全に最初ならまたない
term=0;
}else{//前回記録した時間を元に計算
term=count0t+1000-GetNowCount();
}
}else{ //待つべき時間=現在あるべき時刻-現在の時刻
term = (int)(count0t+fps_count*(1000.0/FLAME))-GetNowCount();
}
if(term>0){//待つべき時間だけ待つ
Sleep(term);
}
gnt=GetNowCount();
if(fps_count==0){//60フレームに1度基準を作る
count0t=gnt;
}
f[fps_count]=gnt-t;//1周した時間を記録
t=gnt;
//平均計算
if(fps_count==FLAME-1){
ave=0;
for(i=0;i<FLAME;i++){
ave+=f[i];
}
ave/=FLAME;
}
fps_count = (++fps_count)%FLAME ;
}
//x,yの位置にfpsを表示
void draw_fps( void )
{
if(ave!=0){
DrawFormatString( 0, 0, GetColor( 255,0,0 ),"%.1ffps",1000/ave);
}
}