爲了將遊戲清晰地移植到iPhone上,我試圖製作一個不使用NSTimer的遊戲循環。如何在不使用NSTimer的情況下在iPhone上製作遊戲循環
我認爲,如果使用的NSTimer,你會用什麼設置它在一開始像一些示例代碼注意到
self.animationTimer = [NSTimer scheduledTimerWithTimeInterval:animationInterval target:self selector:@selector(drawView) userInfo:nil repeats:YES];
其中drawView函數看起來是這樣的:
- (void)drawView
{
glBindFramebufferOES(GL_FRAMEBUFFER_OES, viewFramebuffer);
mFooModel->render();
glBindRenderbufferOES(GL_RENDERBUFFER_OES, viewRenderbuffer);
[context presentRenderbuffer:GL_RENDERBUFFER_OES];
}
當使用這種技術mFooModel呈現很好,但我反而想讓自己的遊戲循環調用drawView,而不是讓NSTimer每秒調用drawView 60次。我想這樣的事:
while(gGameState != kShutDown)
{
[self drawView]
}
不幸的是,當我這樣做,我得到的只是一個黑屏。爲什麼會發生?無論如何,我可以實現我在這裏描述的內容嗎?
我想避免NSTimer的原因是因爲我想在遊戲循環中做物理和AI更新。我使用自己的時鐘/定時器來跟蹤已經過去的時間量,以便我可以準確地做到這一點。渲染髮生儘可能快。我嘗試使用一些技巧,如this article
這是有些衝動的問題的描述(你做你一直在編碼一整天后,被卡住,並希望回答的人在那裏,到了早晨)
乾杯的傢伙。
謝謝。這是非常有用的代碼。 – user156848 2009-08-30 04:34:19
我忘了提醒你,如果你有更多的工作比1/45秒(或runloop停滯不止),你會有口吃,延遲觸摸事件和其他奇怪的問題。一定要徹底測試。更新代碼來解決這個問題是可能的,但是特定於應用程序 – rpetrich 2009-08-30 08:07:16
運行循環中的所有alloc/dealloc都不會影響性能嗎?有沒有辦法在循環之外移動? – Andrew 2010-08-12 21:38:50