我正在尝试跟踪游戏中的每秒帧数。我不希望 fps 显示为平均值。我想看看当我按键和添加模型等时帧速率受到怎样的影响。所以我使用一个变量来存储当前时间和前一个时间,当它们相差 1 秒时,我会更新 fps。
我的问题是它显示大约 33fps,但是当我快速移动鼠标时,fps 跳升至 49fps。其他时候,如果我在其他地方更改与帧计数器无关的简单代码行,或者关闭项目并稍后打开它,则 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 ();
}
最佳答案
timeGetTime() 不准确。使用high performance counter相反。
Sample code在另一个答案中。
关于frame - 我不明白为什么这个 fps 计数器不准确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2261820/