我想跟蹤我的遊戲每秒幀數。我不希望fps顯示爲平均值。我想看看當我按下按鍵和添加模型等時幀頻如何受到影響。所以我使用一個變量來存儲當前時間和以前的時間,當它們相差1秒時,我更新fps。我不明白爲什麼這個fps計數器是不準確的
我的問題是它顯示的是33fps左右,但是當我將鼠標移動得非常快時,fps跳到49fps。其他時候,如果我在其他地方更改了與幀計數器無關的簡單代碼行,或者關閉了項目並稍後打開它,則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();
}
這個問題的答案取決於你如何生成你的框架以及代碼在你的渲染循環中的位置 – ChrisF 2010-02-14 16:44:33