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