【发布时间】:2014-08-20 15:49:18
【问题描述】:
我正在尝试将 SDL 程序限制为 60 FPS 并使用以下代码计算 FPS:
static const Uint32 min_frame_time = 16;
Uint32 start_time = SDL_GetTicks();
// Rendering stuff...
time_delta = SDL_GetTicks() - start_time;
fps_sum += 1000.0 / (float)time_delta;
fps_count++;
if(fps_count >= fps_max_count)
{
printf("FPS: %f\n", fps_sum / (float)fps_count);
fps_count = 0;
fps_sum = 0.0;
}
if(time_delta < min_frame_time)
SDL_Delay(min_frame_time - time_delta);
但似乎 SDL_Delay 以某种方式影响了 SDL_GetTicks 的返回值,因此 time_delta 得到的值是 0 到 3,而当我只删除最后 2 行时,它通常约为 15。
对我来说,这毫无意义。有谁知道怎么回事?
编辑:
上面的代码基本上是我程序的主循环。我首先实现了一个 fps 计数器,方法是在 start_time 中渲染场景之前节省时间,然后计算多个循环的平均 fps,效果很好。
然后,我添加了最后两行以将 fps 限制为 60。因此,如果渲染速度比 min_frame_time 快,则程序应该等待其余时间。但是加上这个之后,除了第一个循环之外,所有循环的SDL_GetTicks()的结果都变得奇怪了,所以delta变成了我上面提到的这些小值。
【问题讨论】:
-
我不明白你的问题。您能否对其进行编辑并详细说明您在有没有延迟的情况下看到的内容。另外,是在循环之间吗?
标签: c++ time sdl delay frame-rate