トップページ > 過去ログ > 記事閲覧
FPSを表示するプログラムで
名前:流考 日時: 2008/04/26 21:14

はじめまして。 「シューティングゲームの館」さんの紹介している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で、ライブラリはこちらのサイトのを使わせてもらっています。 スペック的には何ら問題はないのですが。。 よろしくお願いいたします。

Page: 1 |

Re: FPSを表示するプログラムで ( No.1 )
名前:キーチック 日時:2008/04/27 00:19

きっちりと測定したことはあまりないのですが,DXライブラリはDirectXを 使っているせいか,CPUの速度とGPUの速度(性能)にかなり左右されると感じています. 具体的にはCPUのスペックが上のノートPCで実行した場合より, CPU速度が低めのPCの方が,描画が速かったことがあります. 理由として,ノートPCのグラフィックはオンボードのチップで そのPCはDirectX対応のグラボを乗せていたからではないかと 考えるようになりました. また,グラボが同程度であれば,CPUの能力(クロック周波数のほか マルチスレッド対応かどうかなど)で速度差が出ることは 当然のごとく確認しています. また,常駐プログラムが多いと,CPUとメモリを消費します. そのへんのスペックを検討してみてはいかがでしょうか.
Re: FPSを表示するプログラムで ( No.2 )
名前:流考 日時:2008/04/27 18:53

ありがとうございます。 ノートPCでグラフィックがオンボードなので、もしかしたらそのあたりのゲームではスペック不足になるのかもしれません。 とりあえず代わりの方法やスペックの改善を行うことにします。

Page: 1 |