2011-07-25 49 views
1

我有兩個NSMutableArrays,collectables和collectableViews。使用計時器刪除對象

我的應用程序由一個字符的走動和收集精品(硬幣,蘋果,香蕉等)的點...

我想收藏品到一定的時間後消失。但是,我對將NSTimer置於何處不會中斷模型/視圖/控制器設計感到困惑。

例如,如果我把一個人定時器每個模型,該模型不知道該視圖,並不能去除的觀點..

如果我把中的NSTimer控制器,我需要在屏幕上創建另一個由所有可收集數組成的數組,按照哪個數組首先到期。定時器的方法會每秒觸發一次,並在到期時刪除每個可收集的。

有沒有更容易,更好的方法來做到這一點?

回答

2

大多數遊戲使用一個或多個遊戲時鐘模擬這種「狀態監視」。你可以做這樣的事情:

  1. 創建包含一個持續時間的數據結構,功能 指針,以及對象變量的數組。對於這個例子,讓我們調用 它DecayEvent。
  2. 在前端(主) 控制器中創建一個靜態可變數組DecayEvent,並帶有一些漂亮的存取方法
  3. 選擇適當的事件處理間隔。它需要足夠大,以處理您認爲事件的最大數目 ,但足夠小,不會延遲用戶體驗。
  4. 在前端控制器上創建一個方法,該方法將通過 處理衰減事件數組。每次調用該方法時, 都會迭代數組,並將事件的持續時間減少 事件處理間隔。如果衰減事件持續時間低於 零,則'觸發事件'(基本上,使用回調參數在另一個線程中觸發其回調函數 )。
  5. 在主線程中創建一個NSTimer。將其設置爲在每個事件處理間隔調用您的 處理方法。

你將不得不調整一下,讓所有的東西都能按照你想要的方式工作,但上面的步驟通常會起作用。

祝你好運!

1

由於控制器可以訪問每個數據模式,並且您也可以訪問數組,所以您目前的情況往往是應該在控制器中保留計時器。另一種方法是使用NSNotificationCenter。首先嚐試,如果這不起作用,然後讓我們知道。