以下是我在Android应用中实现的游戏循环代码。
它工作得很好,但我遇到的问题是虽然它在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 :(得分:0)
有几种方法可以限制帧率,但如果您想要做的只是:
具体来说,渲染只应在逻辑更新时呈现,而不是渲染冗余帧(即,没有发生逻辑更新时)。
然后你可以设置一个简单的布尔标志。在update_game()
中将其设置为true,并在onDraw()
中进行检查。如果它是假的,只需返回而不绘制/清除屏幕。如果为true,请绘制并将其设置为false;