3.14章 特定のFPSで動作させる方法を見ながらやったのですが
60.0と表示されず、30.0と表示されます。
自分のモニターの画面のリフレッシュレートは60ヘルツになってます。
原因がわかる方がいましたら教えてください
#include <math.h>
#include "DxLib.h"
class Fps{
int mStartTime; //計測開始時刻
int mCount; //カウンタ
float mFps; //fps
static const int N = 60; //平均を取るサンプル数
static const int FPS = 60; //設定したFPS
public:
Fps(){
mStartTime = 0;
mCount = 0;
mFps = 0;
}
bool Update(){
if( mCount == 0 ){ //1フレーム目なら時刻を記憶
mStartTime = GetNowCount();
}
if( mCount == N ){ //60フレーム目なら平均を計算する
int t = GetNowCount();
mFps = 1000.f/((t-mStartTime)/(float)N);
mCount = 0;
mStartTime = t;
}
mCount++;
return true;
}
void Draw(){
DrawFormatString(0,0,GetColor(255,205,255),"%.1f",mFps);
}
void Wait(){
int tookTime = GetNowCount() - mStartTime; //かかった時間
int waitTime = mCount*1000/FPS - tookTime; //待つべき時間
if( waitTime > 0 ){
Sleep(waitTime); //待機
}
}
};
int WINAPI WinMain( HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow ){
SetMainWindowText( "タイトル" ); //タイトル
ChangeWindowMode( TRUE ); //ウィンドウモード
SetGraphMode( 800,600,32 ); //画面モードの変更
if( DxLib_Init() == -1 ){ //DXライブラリ初期化
return -1;
}
if( SetDrawScreen( DX_SCREEN_BACK ) == -1 ){ //描画を裏画面に設定
DxLib_End();
return -1;
}
Fps fps;
while( 1 ){ //メインループ
if( ScreenFlip() != 0 ){
break;
}
if( ProcessMessage() != 0 ){
break;
}
if( ClearDrawScreen() != 0 ){
break;
}
fps.Update(); //更新
fps.Draw(); //描画
ScreenFlip();
fps.Wait(); //待機
}
DxLib_End(); //DXライブラリ終了
return 0; //ソフトの終了
}