FPSの固定
Posted: 2009年5月05日(火) 01:53
60FPSで回したいのですが
処理が止まらなくなってしまいます・・・
修正個所がわからないのですがどなたか教えてはいただけないでしょうか?
処理が止まらなくなってしまいます・・・
修正個所がわからないのですがどなたか教えてはいただけないでしょうか?
const DWORD FPS_MAX = 60; // FPS設定
DWORD FPS; // FPS計測値
BOOL EndF = FALSE; // 終了フラグ
//==============================================================================================
// メインループ
//==============================================================================================
void GameMain(void){
//メインループ
while(!EndF){
FPSCount(&FPS); // FPS の計測
}
}
//==============================================================================================
// FPSウェイト
//==============================================================================================
void FPSWait(DWORD wait_time){
MSG msg;
DWORD start_time = timeGetTime();
do{
// メッセージ処理
if(PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)){
TranslateMessage(&msg);
DispatchMessage(&msg);
}
if(wait_time > 0) Sleep(1); // ちょっと休憩(CPUの占有率を下げるため)
}while(timeGetTime() < wait_time + start_time); // wait_time だけ回る
}
//==============================================================================================
// FPSの固定
//==============================================================================================
void FPSSet(DWORD wait_time){
DWORD StartTime, EndTime, PassTime;
StartTime = timeGetTime();
EndTime = timeGetTime();
PassTime = EndTime - StartTime; // 経過時間の計算
(1000 / FPS_MAX > PassTime)? FPSWait(1000 / FPS_MAX - PassTime) : FPSWait(0); // 待つ。
}
//==============================================================================================
// FPS の計測
//==============================================================================================
void FPSCount(DWORD *fps){
static DWORD before_time = timeGetTime(); // 以前の時間
DWORD now_time = timeGetTime(); // 現在の時間
static DWORD fps_ctr = 0;
if(now_time - before_time >= 1000){
// 初期化
before_time = now_time;
*fps = fps_ctr;
fps_ctr = 0;
}
fps_ctr++;
}