Я пытаюсь отслеживать кадры в секунду в моей игре. Я не хочу, чтобы fps показывал в среднем. Я хочу посмотреть, как влияет частота кадров, когда я нажимаю клавиши, добавляю модели и т. Д. Поэтому я использую переменную для хранения текущего и предыдущего времени, и когда они отличаются на 1 секунду, я обновляю fps.
Моя проблема в том, что он показывает скорость около 33 кадров в секунду, но когда я очень быстро перемещаю мышь, частота кадров увеличивается до 49 кадров в секунду. В других случаях, если я изменю простую строку кода в другом месте, не относящемся к счетчику кадров, или закрою проект и открою его позже, fps будет около 60. Vsync включен, поэтому я не могу сказать, продолжает ли работать мышь 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 ();
}