はじめまして。
「シューティングゲームの館」さんの紹介しているFPSを表示するプログラムで、次のようなコードがあるのですが、
なぜか、私がコンパイルすると、通常60FPS出るはずにもかかわらず40~50FPSになってしまいます。処理を
加えると20FPSぐらいに落ちてしまいます。
調べた限りコードのほうに間違いがあるとは思えず、不思議に思っています。
#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 ;
}
使っている環境はVC++2005で、ライブラリはこちらのサイトのを使わせてもらっています。
スペック的には何ら問題はないのですが。。
よろしくお願いいたします。