frame - 我不明白为什么这个 fps 计数器不准确

标签 frame counter frame-rate

我正在尝试跟踪游戏中的每秒帧数。我不希望 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/

相关文章:

javascript - 在 Google Chrome 中使用 javascript 访问另一个框架( Uncaught ReferenceError )

python - 如何从特定视频帧读取像素

java - 我如何将 JTextArea 添加到此代码中?

ruby-on-rails - Rails 中页面浏览量的简单点击计数器

java - 如何在Java中实现对象计数器

java - 我如何编辑我的代码来计算和显示每个名字在我的列表中出现的次数

c++ - 周期性 FPS 下降的可能原因?

c++ - 在 C++ 中限制 FPS

java - 如何获取 Kerberos TGS 并在 Java 的 GUI 应用程序中使用它?

ios - 以快速、缓慢的性能和低 FPS 绘制应用程序