我正在为 iPhone 使用 OpenGL ES 创建 2D 游戏。我正在使用 NSTimer 以 0.002 (60 fps) 的间隔调用我的游戏循环,并将重复设置为“NO”(我正在按照建议从函数内再次运行 NSTimer):
-(void)gameLoop:(id)sender {
double currTime=(double)CACurrentMediaTime();
m_FPS_framesThisSecond++;
float timeThisSecond=currTime-m_FPS_lastSecondStart;
if (timeThisSecond>1.0f) {
m_FPS=m_FPS_framesThisSecond;
m_FPS_framesThisSecond=0;
m_FPS_lastSecondStart=currTime;
}
[game update];
[game render];
//Continue the loop
[NSTimer scheduledTimerWithTimeInterval:0.002 target:self selector:@selector(gameLoop:) userInfo:nil repeats:NO];
}
这在我的 3GS 上运行流畅,但是当我在 2G 上测试时,游戏运行速度要慢得多,有时我会偶尔出现空白帧。当我将间隔降低到 0.033 (30 fps) 时。3G太慢了。
我知道必须有某种方法可以在两种设备上获得一致的播放。Doodle Jump 似乎在两部手机上运行流畅且帧率相同。