我正在为OpenGL ES创建一个2D游戏。我打电话设置为“NO”重复使用的NSTimer在0.002(60 fps)的间隔我的游戏循环(从函数内再次我运行的NSTimer建议):如何在新旧iPhone上获得一致的速度?
-(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上的速度太慢了。
我知道必须通过某种方式在两台设备上获得持续播放。涂鸦跳跃似乎运行平稳,并在两个手机相同的帧率。
那么,还有什么时候离开硬件架构的肮脏的思想流派。自iOS4起,苹果公司(官方)放弃了对iPhone 2G(原始iPhone)的支持。也许,也许你可能会考虑做同样的事情,因为任何未来的OpenGL ES更新将只针对3G以上(看到苹果现在如何发布OpenGL ES2设备功能的系统 - 尽管3G不支持ES2) 。不要告诉你,你有一个不好的问题,(事实上,我为它+1)...只是说有时你需要考虑你的应用程序的未来。 – Jann 2010-07-10 22:33:22
我肯定会忽视3GS之前的设备(我不知道有2G的任何人)。但同时,我想我应该将游戏速度与帧率分开。无论如何,OpenGL ES2将是我的下一个努力! – Scott 2010-07-11 01:49:45