码迷,mamicode.com
首页 > 其他好文 > 详细

SDL实现限制帧速

时间:2015-02-26 22:54:10      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

      很多人都在SDL_PollEvent和SDL_WaitEvent之间纠结。前者会带来更好的帧数表现,但是CPU占用极大,可以直接吃掉一个核心。后者则基本不占用CPU,但是帧数会受到影响。有没有办法使两者的优势结合呢?其实只要用轮询(SDL_PollEvent)并且配合一个帧速限制即可。

      什么是帧速(FPS)?是指画面每秒传输帧数。要保证画面流畅,一般就要保持帧速在20及以上。要想限制帧速,我们只要在循环中加入如下代码:

const Uint FPS=1000/20;//20可替换为限制的帧速
Uint _FPS_Timer;
while (quit!=0){
    //事件处理等
    if(SDL_GetTicks()-_FPS_Timer<FPS){
        SDL_Delay(FPS-SDL_GetTicks()+_FPS_Timer);
    }
    _FPS_Timer=SDL_GetTicks();
}

      这个就是帧速率限制的方法。
      当我们开始传输一帧时,我们同时开始计时,跟踪显示当前帧用的时间。为了使这个程序不会运行的太快,每帧传输需要一定的时间,要求每秒显示20帧,那么每帧显示时间要不小于1/20秒。如果帧速率是60fps,每帧显示需要时间就要不小于1/60秒。例程要求是20帧每秒,也就是每帧需要耗时50毫秒。
     为了调整帧速率,我们首先要检查帧计时器的时间是否小于每帧传输所需时间。如果帧计时器时间大于每帧传输所需时间,就说明帧速率比要求的要低,这样我们就不需要进行限速调整了。如果帧计时器时间比每帧所需的时间少,那么我们就要用SDL_Delay()来进行延时,使帧速率符合要求。
     假设程序运行时,帧计时器的时间是20毫秒,那么我们就需要延时30毫秒;如果帧计时器是40毫秒,那么就要延时10毫秒(这样做的话,每帧相当于耗时50毫秒,帧传输速率就是20帧每秒)。

SDL实现限制帧速

标签:

原文地址:http://www.cnblogs.com/Darksun/p/4302298.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!