いつもお世話になります。
つかぬ事かもしれませんが、ちょっと判らない事がありますので質問させてください。
現在製作中のプログラムで、最初にScreenFlipを利用してCRTのリフレッシュレートを大雑把に調べ、
ゲーム中のスピード調整をするようにしています。
今までは何の問題もなかったのですが、
ちょっと古い型のノートパソコンを手に入れたのでそれでも動作確認をしてみましたところ、
スピード調整がまったく利かず、随分と早くなってしまいました。
そのノートパソコン(WindowsXP)の画面のプロパティの設定で
モニタのリフレッシュレートを60になっているのに、です。
そこでサンプルプログラム(後述)を作ってみて実行していたところ、
FPSが100〜500とか大きい数値になり、しかも実行するたびに数値の範囲が変ります。
ScreenFlipで垂直信号同期待ちがされていないのか、
あるいはノートPCのリフレッシュレートがなぜか勝手に変わってしまっているか、
くらいしか想像がつかないのですが、
なにが原因か、おわかりになる方はいらっしゃいませんでしょうか?
よろしくお願いいたします。
テストに使用したプログラムは以下のとおりです。
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow )
{
int i = 0 ;
LONGLONG old_time = 0 ;
LONGLONG now_time = 0 ;
int old_fps_cnt = 0 ;
int fps_cnt = 0 ;
// 画面モードのセット
SetGraphMode( 640 , 480 , 16 ) ;
if(DxLib_Init()==-1)return -1;
SetDrawScreen(DX_SCREEN_BACK);
old_time = GetNowHiPerformanceCount() ;
now_time = old_time ;
while( ProcessMessage() == 0 && CheckHitKey( KEY_INPUT_ESCAPE ) == 0 ) {
fps_cnt++ ;
if ( old_time + 1000000 < GetNowHiPerformanceCount() ) {
old_fps_cnt = fps_cnt ;
fps_cnt = 0 ;
old_time = GetNowHiPerformanceCount() ;
}
ClearDrawScreen() ;
DrawFormatString( 0, 0, GetColor(255,255,255) , "%d:%d ", fps_cnt , old_fps_cnt ) ;
ScreenFlip();
}
WaitKey() ;
DxLib_End();
return 0;
}