我正在爲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