2011-11-16 155 views
3

我在寫iPhone遊戲。當用戶進行第一次移動時,計時器以0.01秒的間隔進行踢球。顯示時間的UILabel也會每次更新。 我在iPod touch二代和iPhone 3GS,該iPod的較慢測試時發現(20秒的iPhone顯示00後:20,00和iPod顯示〜00:10,00)。有沒有辦法讓這個更可靠?如果我是正確的,那麼NSTimer應該在它的ow線程上運行,並且不應該被用戶交互阻塞。什麼是實現遊戲計時器的最有效方式

JNK

回答

3

的的NSTimer文檔狀態:

由於各種輸入的源的 典型運行循環管理,時間間隔 用於定時器的 有效分辨率被限制爲上 的50-順序100毫秒。如果在 運行循環是一種模式,是不是 監視定時器或長 標註過程中出現 計時器的燒成時間,計時器不火,直到 下一次運行循環檢查 計時器。因此,在 的實際時間將定時器觸發潛在可 是時間 預定發射時間後,顯著的時期。

所以精度可壞0.1,不時0.01秒。更不用說如果你的線程由於某種原因被阻塞。所以如果你的射擊時間很關鍵,你應該看看其他的東西。閱讀此SO post開球。蘋果公司有一個節拍器示例代碼(其中顯然時機很關鍵),但我現在找不到它。

在任何情況下,如果要實現用的NSTimer計時器,你應該記錄你的開始時間。然後,無論何時更新界面,只需將當前時間和開始時間的差異(使用NSDates)即可。

0

確保你沒有一個基礎關閉計時器或休眠延遲。自啓動程序或當前時間

,對不起,我不熟悉你的語言,如時鐘的週期數你應該總是更新基於事物的計時器

0

你不能依靠定時器的方式運行在指定的時間間隔,所以您顯示的時間應始終通過計算時間間隔差異來計算。我懷疑,在iPhone上的定時器可以運行每隔1毫秒,在石英有可能得到一個計時器調用每16毫秒左右,使60 fps的 - 所以安排它在1ms的可能儘快意味着「運行「,這在不同的硬件上可能會有很大不同。

+3

0.01s!= 1ms。 0.01s = 10ms。 1s = 1000ms。 – Mytheral

相關問題