2010-06-15 67 views
0

我做了一個遊戲,在整個代碼中使用了很多定時器。然而,計時器必須在很短的時間內處理很多任務,這導致了我的遊戲存在滯後的問題。例如,我的計時器以(0.05)的間隔運行,它需要繪製和更新屏幕上的許多圖像。有什麼方法可以分發工作流程,以便程序運行更順暢?NSTimer Lag - iPhone SDK

感謝

凱文

回答

2

我會用一個NSThread而不是NSTimer。我在這方面使用NSThread獲得了更多的成功,因爲它運行在一個獨立的線程上,並且不會從主UI線程中觸發。在線程的循環中,它以1/20(你的0.05)秒爲單位睡眠。由於該線程未在UI線程上運行,因此其所有任務都不應放慢您的UI。但是,它不在UI上運行,您將不得不呼叫performSelectorOnMainThread以使UI從此後臺線程更新。我在我的update方法(一個簡單的布爾值)上加鎖,說如果最後一次ui更新沒有發生,就跳過這一步。那麼如果即將耗盡處理時間,我會在這裏和那裏放下一兩幀。我也做了很多檢查,看看在重繪之前是否有任何實際改變。

0

簡單的解決方案:溝渠NSTimer。

將您的重繪代碼移至單一方法,然後使用CADisplayLink。使用NSTimer方法的問題在於,屏幕上的所有內容都將重繪得太快或太慢。通過使用CADisplayLink,您可以將重繪代碼同步到屏幕刷新率。所有你需要做的就是修改你的代碼,以便它可以處理在特定時間不被調用。

是的,檢查以確保您不需要重新繪製像上面說的Aran Mulholland所說的那樣。只要確保檢查不會像重繪一樣長。

並記住優化您的代碼。很多。使用ivars訪問對象,但整個屬性(self.myObject =)設置您的對象。