我正在尝试在我的游戏中跟踪每秒帧数。我不希望 fps 显示为平均值。我想看看当我按下按键和添加模型等时帧速率是如何受到影响的。所以我使用一个变量来存储当前时间和以前的时间,当它们相差 1 秒时,我会更新 fps。
我的问题是它显示在 33fps 左右,但是当我快速移动鼠标时,fps 会跳到 49fps。其他时候,如果我在其他地方更改与帧计数器无关的简单代码行,或者关闭项目并稍后打开它,fps 将在 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;
请让我知道这里出了什么问题以及如何解决它,或者您是否有更好的方法来计算 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 ();
}