2012-04-08 13 views
2

我正在開發一個類似遊戲的遊戲(iOS/Cocos2d)。我有一個類Map的對象,它有一堆GameObjects。在iOS遊戲中通知模型變化的設計

我有GameViewController類。當模型中有東西發生時(生物被殺,玩家移動,任何事情),我需要通知GameViewController這個變化。怎麼做?

我看到兩個選項:

  1. GameViewController實例可以是地圖的一個代表,每個遊戲對象的委託。
  2. GameViewController將偵聽來自Map和GameObjects的NSNotifications。

哪種方式更好?爲什麼?

+0

GameViewController是否需要了解每個GameObject? Map包含GameObjects,所以它可以觀察它們(作爲委託,監聽GameObjects的通知或者指向自己的指針),然後將這些消息傳遞給GameViewController類(再次使用這三個中的任何一個技術)。 – Dondragmer 2012-04-09 01:55:43

回答

0

Cocos是一個強烈的基於單例的庫,所以單例方法在Cocos遊戲中很常見。但這並不意味着它是合乎邏輯的默認選擇。

對於任何程序而言,您的第二個選擇通常是更明智和更安全的方法,而不僅僅是Cocos。 NSNotifications允許你通知其他對象的對象,而不會進入潛在的錯誤狀態,在程序中傳遞大量引用或單例。如果你可以通過幾個通知來實現你的目標,這是一條路。

如果你發現你使用的NSNotifications的程度很高,比如每秒有多個通知,那麼你應該考慮通過指針傳遞你的對象之間的引用,或者創建父類或主Cocos場景類作爲單例。

請記住,當你涉及單身人士時,雖然他們很容易實施,但濫用他們也很容易。你不希望養成讓孩子班級控制他們兄弟姐妹行爲的習慣,因爲他們可以輕鬆訪問父母和父母的方法。