我正在尝试解决一个架构问题,但我想找到最合适的方法。
我有游戏场景GameLayer.h,这是我在这种情况下的观点。我还有GameEngine类,我正试图成为控制器。 我有我的自定义Egg类派生自CCNode和一些计时器逻辑通过Egg类中的计划实现。 我通过addChild方法在游戏场景中添加了许多Egg对象。 所以GameEngine.m导入GameLayer.h,而GameLayer.m导入Egg.h
每个Egg中的计时器用完后,我想收到通知,即运行一些动作,增加分数等。 问题是实施这种情况的最佳方式是什么。我也想遵守MVC规则 我想到的快速解决方案是
请帮忙,感谢任何例子
答案 0 :(得分: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中实现协议的方法,并使其成为Egg对象的委托:
// somewhere in GameLayer
Egg *egg = [Egg node];
egg.delegate = self;
...
//protocol implementation
-(void)egg:(Egg *)egg hadSomethingHappen:(int)parameter
{
// do something
}