我正在阅读Learn Cocos2d 2;并偶然发现了这个问题:在游戏场景中,场景层次结构下可能有数千个实体,并且所有这些实体都可能想要与最上面的场景对象进行交谈。学习的Cocos2D 2笔者建议使用全局变量这样在cocos2d中安全地访问当前场景的最佳方式是什么?
static GameLayer* sharedGameLayer;
+(GameLayer*) sharedGameLayer
{
NSAssert(sharedGameLayer != nil, @"GameScene instance not yet initialized!");
return sharedGameLayer;
}
+(id) scene
{
CCScene *scene = [CCScene node];
GameLayer *layer = [GameLayer node];
[scene addChild: layer];
InputLayer* inputLayer = [InputLayer node];
[scene addChild:inputLayer z:1 tag:GameSceneLayerTagInput];
return scene;
}
我个人认为这种方法不可靠:想象一个球员实体想知道从场景另一层触摸输入,所以它调用sharedGameLayer和假设它实际上就是它的父母,它只是从那里开始工作。但是,它怎么能如此确定?如果这个sharedGameLayer是别人分配的另一个实例呢?当然,在cocos2d中一次只能有一个场景,所以这种方法在大多数情况下可能没有任何问题。但从设计角度来看,我仍然觉得缺乏这种方法。
我想过两种选择:
使用正确的(旧)的委托方法。在每个级别分配正确的委托/委托关系。但是,这意味着数千行可能重复的代码,并且从我的角度来看并不整齐
使用NSNotification(或KVO?)从子级别广播消息,并让父级响应。但是,这是否意味着该系统
在这一点上,我完全迷失了,谁能告诉我有关经验的程序员可以使用一般的成语不必要的开销?
谢谢!你的文章肯定帮了我很多!我认为你解释的消息传递方法似乎是我的方式:) – lynnard