0

我試圖解決一個架構問題,但我想找到最合適的方法。如何從小孩通知父課堂?

我有遊戲場景GameLayer.h這是我的觀點在這種情況下。我也有GameEngine類,我試圖成爲控制器。 我有我的自定義蛋類從CCNode派生和一些計時器邏輯通過時間表實現在蛋類。 我通過addChild方法添加了許多遊戲場景中的蛋對象。 所以GameEngine.m進口GameLayer.h和GameLayer.m進口Egg.h

在每個蛋用完了,我想通知計時器後,即運行一些行動,增加分數等 問題是什麼是實施這種情況的最佳方式。此外,我要服從MVC規則,來在我的腦海 快速的解決方案是

  1. 在雞蛋類包括Gamelayer.h和調用一些更新方法在裏面。更新視圖(自我)並通知GameEngine保存新分數。
  2. 在Egg類中包含Gamelayer.h並在其中調用一些更新方法。在更新方法中,調用GameEngine.h中的另一個更新方法,現在從GameEngine保存得分,並更新遊戲玩家(視圖)
  3. 實現KVO。問題是,我從來沒有做過這之前,我不知道觀察者應該GameLayer或GameEngine

請幫幫忙,任何例子是值得讚賞

+1

您最好的選擇可能是數無論採取何種行動,都應遵守這些信息。只要確保完成後取消註冊觀察者。 – dqhendricks 2013-04-25 15:29:48

回答

1

更多選擇:

1. 使用NSNotificationCenter。你的雞蛋會發布通知,你的GameLayer會觀察。

2. 使用protocol。例如:

// in Egg.h 

@class Egg; 
@protocol EggDelegate 
// an example method 
-(void)egg:(Egg *)egg hadSomethingHappen:(int)parameter; 
@end 

@interface Egg: CCNode 
@property (weak) id<EggDelegate> delegate; 
@end 

// in Egg.m 
/// something happened and delegate has to be notified? 
[self.delegate egg:self hadSomethingHappen:someNumber]; 

然後聲明GameLayer支持此協議:

@interface GameLayer : CCLayer <EggDelegate> 

實現協議的方法GameLayer並使其你的蛋對象的委託:

// somewhere in GameLayer 
Egg *egg = [Egg node]; 
egg.delegate = self; 

... 

//protocol implementation 
-(void)egg:(Egg *)egg hadSomethingHappen:(int)parameter 
{ 
// do something 
} 
+0

非常感謝,我將使用代表團 – Grixol 2013-04-26 08:32:58