ゲームで 1 秒あたりのフレーム数を追跡しようとしています。fpsを平均として表示したくありません。キーを押したり、モデルを追加したりしたときにフレームレートがどのように影響されるかを確認したいので、変数を使用して現在の時刻と前回の時刻を保存し、それらが 1 秒異なるときに fps を更新します。
私の問題は、約 33 fps を表示していることですが、マウスを非常に速く動かすと、fps が 49 fps に跳ね上がります。また、フレーム カウンターに関係のない単純なコード行を変更したり、プロジェクトを閉じて後で開いたりすると、fps は約 60 になります。垂直同期がオンになっているため、マウスがまだ有効かどうかわかりません。 fps。
フレームごとに発生する更新関数にある私のコードは次のとおりです。
FrameCount++;
currentTime = timeGetTime ();
static unsigned long prevTime = currentTime;
TimeDelta = (currentTime - prevTime) / 1000;
if (TimeDelta > 1.0f)
{
fps = FrameCount / TimeDelta;
prevTime = currentTime;
FrameCount = 0;
TimeDelta = 0;
}
変数宣言は次のとおりです。
int FrameCount;
double fps, currentTime, prevTime, TimeDelta, TimeElapsed;
ここで何が問題なのか、それを修正する方法、または fps をカウントするより良い方法があれば教えてください。ありがとう!!!!!!
私はDirectX 9を使用していますが、それが関連しているとは思えず、PeekMessageを使用しています。代わりに if else ステートメントを使用する必要がありますか? これが私のメッセージ処理ループです:
MSG msg;
ZeroMemory (&msg, sizeof (MSG));
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
}
Update ();
RenderFrame ();
}