我想计算一场比赛最后2-4秒的FPS。做这件事最好的方法是什么?
谢谢。
编辑:更具体地说,我只能访问一个具有一秒增量的计时器。
发布于 2011-01-14 10:46:19
差一点错过了最近的一篇帖子。请看我在使用指数加权移动平均线上的回应。
C++: Counting total frames in a game
以下是示例代码。
最初:
avgFps = 1.0; // Initial value should be an estimate, but doesn't matter much.每秒(假设最后一秒的总帧数为framesThisSecond):
// Choose alpha depending on how fast or slow you want old averages to decay.
// 0.9 is usually a good choice.
avgFps = alpha * avgFps + (1.0 - alpha) * framesThisSecond;发布于 2011-01-14 10:38:31
这里有一个可能对你有效的解决方案。我将用伪/C编写这段代码,但是您可以根据您的游戏引擎来调整这个想法。
const int trackedTime = 3000; // 3 seconds
int frameStartTime; // in milliseconds
int queueAggregate = 0;
queue<int> frameLengths;
void onFrameStart()
{
frameStartTime = getCurrentTime();
}
void onFrameEnd()
{
int frameLength = getCurrentTime() - frameStartTime;
frameLengths.enqueue(frameLength);
queueAggregate += frameLength;
while (queueAggregate > trackedTime)
{
int oldFrame = frameLengths.dequeue();
queueAggregate -= oldFrame;
}
setAverageFps(frameLength.count() / 3); // 3 seconds
}发布于 2011-01-14 10:36:38
是否可以为最后100帧保留帧时间的循环缓冲区,并对其进行平均?这将是“最后100帧的FPS”。(或者,更确切地说,是99,因为您不会区分最新和最旧的时间。)
调用一些精确的系统时间,毫秒或更好。
https://stackoverflow.com/questions/4687430
复制相似问题