在一个场景中CCLayers之间的通信

时间:2013-03-23 23:49:14

标签: cocos2d-iphone kobold2d cclayer ccscene

我有两个需要在单独的.m文件中相互通信的CCLayer

  • Level1.m(CCScene with Level1 CCLayer) - 保存平铺地图和玩家精灵
  • HUDLayer.m(链接到Level1.m的顶部) - 保留所有按钮

如何在HUDLayer.m中获取以下代码以与Level1.m中的玩家精灵对话?

- (void)MoveUpSelected {
        CCMoveTo* moveup = [CCMoveBy actionWithDuration:1  position:ccp(0,-100)];
        CCSequence* sequence = [CCSequence actions: moveup, nil];
        [Player runAction:sequence];
          }

请帮助我几天坚持这一点。至少如果有人能指出我正确的方向。谢谢!

2 个答案:

答案 0 :(得分:1)

我建议您使用场景对象来控制其图层之间的通信。 您可以创建HUD协议并将场景设置为其委托。并且对于每个HUD事件,场景将通过访问适当的层(存储为其成员)来相应地做出反应。

这样你就不必进行这种层耦合了。

答案 1 :(得分:0)

要访问其他图层,您需要对其进行引用。有很多方法可以做到这一点。在您的情况下,只需为每个图层添加一个属性到CCScene类。然后,图层可以通过其父级访问场景:

CCLayer* otherLayer = [(YourActualSceneClass*)self.parent otherLayer];

非常重要的是,不要在任一层中存储对其他图层的引用,或者如果这样做,请确保将其作为弱引用,或者在清理方法中将它们设为零。否则,您创建了一个保留周期。

你会找到more info on accessing other nodes here