今回PCを新調したため、1からゲーム制作を再開しようと思っていたところで壁にぶつかってしまったためご相談させて頂きます。
ゲームのメインループ部分を実装し、FPS管理を行いフレームレートを計算したところ、
40~44FPSあたりを行ったり来たりと、60FPSに届かない状態でした。
どこで遅延しているのかFPS管理を一時的に外し、各処理で計算してみたところ
ScreenFlip()は約16~17ms。
ProcessMessage()は、0ms。約3回に1度16~17ms。
という結果になりました。(それ以外の箇所に問題はございません)
現在は他に比較できる環境ないため、この処理速度が異常かどうかも判断があやふやなところですが
ProcessMessageが3回に1度の頻度で16~17msという部分がどうにも引っかかっております。
ChangeWindowMode(TRUE); // ウィンドウモードの設定
SetGraphMode(SCREEN_SIZE_X, SCREEN_SIZE_Y, COLOR_BIT_DEPTH); // 画面モードの変更
SetDrawScreen(DX_SCREEN_BACK); // 描画先グラフィック領域の設定
DxLib_Init();
int endFlag = 0;
int time01, time02, time03, time04, time05;
while (!endFlag) {
time01 = GetNowCount();
ScreenFlip(); time02 = GetNowCount();
endFlag = ProcessMessage(); time03 = GetNowCount();
ClearDrawScreen(); time04 = GetNowCount();
clsDx(); time05 = GetNowCount();
printfDx("1to2 %2d[ms]\n", time02 - time01); // ScreenFlip処理速度
printfDx("2to3 %2d[ms]\n", time03 - time02); // ProcessMessage処理速度
printfDx("3to4 %2d[ms]\n", time04 - time03);
printfDx("4to5 %2d[ms]\n", time05 - time04);
}
WaitTimer(10); と指定すると、ProcessMessageの処理速度は0msで安定してくれます。
WaitTimer(5); と指定すると、5~7ループに1度、16~17msとなることを確認しています。
具体的な解決方法がございましたらなによりですが、
他環境でのScreenFlip, ProcessMessageの処理速度だけでも教えて頂ければと思います。
よろしくお願いします。
※以下はPCスペック/設定等になります。
・Windows 10 Home(x64)
・RAM:8.00GB
・グラボ:NVIDIA GeForce GTX 1060 3GB
・DirectX バージョン:12
・リフレッシュレート:60