我想跟踪我的游戏每秒帧数。我不希望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