2013-02-23 28 views
1

这里是我已经实现到我的Android应用程序的gameloop代码。封顶帧率 -

它工作的很好,但是我遇到的问题是,尽管它在30处限制逻辑更新 - 实际渲染运行平稳,这显然对电池寿命并不好。

我不能解决如何限制/限制渲染到一个固定的数量(比如说30个左右的FPS)。

具体来说,渲染应该只在逻辑更新而不是渲染冗余帧时(即没有发生逻辑更新时)渲染。

编辑:我刚刚添加了代码的插值部分 - 这可能会导致问题,当我根据@Geobits推荐的帧限制帧?

int TICKS_PER_SECOND = 30; 
int SKIP_TICKS = 1000/TICKS_PER_SECOND; 
int MAX_FRAMESKIP = 10; 

long next_game_tick = GetTickCount(); 
int loops; 

bool game_is_running = true; 
while(game_is_running) { 

    loops = 0; 
    while(GetTickCount() > next_game_tick && loops < MAX_FRAMESKIP) { 
     update_game(); 

     next_game_tick += SKIP_TICKS; 
     loops++; 
    } 
    interpolation = float(GetTickCount() + SKIP_TICKS - next_game_tick) 
        /float(SKIP_TICKS); 
    display_game(interpolation); 
} 

回答

0

有封顶帧率几个方法,但是如果你想要做的是:

具体的呈现应该只在逻辑已经被更新,而不是渲染冗余帧渲染(即,当没有发生逻辑更新时)。

然后你可以设置一个简单的布尔标志。在update_game()中将其设置为true,并在onDraw()中检查它。如果它是假的,只需返回而不绘制/清除屏幕。如果为true,则执行绘图并将其设置为false;

+0

谢谢@Geobits,我实现了这个,它确实有效(确认渲染和游戏更新每秒发生的次数相同),但它会导致我的精灵出现“痉挛” - 你有什么想法可能会导致这种情况如何避免它?再次感谢 – Zippy 2013-02-24 02:19:00