计算游戏中的FPS

时间:2016-02-17 17:52:21

标签: c++ sdl frame-rate

您好我正在编写2D游戏,我已经找到了几种如何计算每秒帧数的方法,但我还没有真正得到架构规则,其中之一就是:

//at the start of main function
Uint32 startclock = 0;
Uint32 deltaclock = 0;
Uint32 currentFPS = 0;
// at beginning of while(!end_of_game)
startclock = SDL_GetTicks();
//fps calculation inside loop
deltaclock = SDL_GetTicks() - startclock;
startclock = SDL_GetTicks();
//evaluate the formula inside loop
if ( deltaclock != 0 )
    currentFPS = 1000 / deltaclock;
//now i can output the current fps

我无法弄清楚的是,渲染一个屏幕需要一些时间,所以我应该把这个部分放在循环的绝对末端(渲染后得到输入等(绝对结束):

if ( deltaclock != 0 )
    currentFPS = 1000 / deltaclock;

所以基本上在游戏循环的开始我得到开始时钟然后我运行每个单一的功能,如运动碰撞渲染等,然后我评估delta时钟,并基于我计算fps?有大量的fps计算“公式”,但我需要一个真正的程序架构,我的意思是:

//main game loop
//get elapsed time
//game logic
//delta time a.k.a how much time it took to go through the game logic part
//output the fps

感谢

1 个答案:

答案 0 :(得分:4)

如果你在进入while循环之前启动一次,然后使用两行计算deltaclock并重置循环内的startclock,那么你在循环的哪个点进行操作并不重要。它将始终根据您的上一个循环计算增量。

如果将它放在循环的开头或结尾,那么只会影响你的第一次/最后一次迭代,这在FPS计数器中无关紧要。