首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:计算移动FPS

C++:计算移动FPS
EN

Stack Overflow用户
提问于 2011-01-14 10:27:54
回答 4查看 4.8K关注 0票数 7

我想计算一场比赛最后2-4秒的FPS。做这件事最好的方法是什么?

谢谢。

编辑:更具体地说,我只能访问一个具有一秒增量的计时器。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-01-14 10:46:19

差一点错过了最近的一篇帖子。请看我在使用指数加权移动平均线上的回应。

C++: Counting total frames in a game

以下是示例代码。

最初:

代码语言:javascript
复制
avgFps = 1.0; // Initial value should be an estimate, but doesn't matter much.

每秒(假设最后一秒的总帧数为framesThisSecond):

代码语言:javascript
复制
// 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;
票数 16
EN

Stack Overflow用户

发布于 2011-01-14 10:38:31

这里有一个可能对你有效的解决方案。我将用伪/C编写这段代码,但是您可以根据您的游戏引擎来调整这个想法。

代码语言:javascript
复制
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
}
票数 2
EN

Stack Overflow用户

发布于 2011-01-14 10:36:38

是否可以为最后100帧保留帧时间的循环缓冲区,并对其进行平均?这将是“最后100帧的FPS”。(或者,更确切地说,是99,因为您不会区分最新和最旧的时间。)

调用一些精确的系统时间,毫秒或更好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4687430

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档