2013-03-23 132 views
1

CCLayers之间Communitacting我有2个CCLayers需要在单独的.m文件在一个场景

  • Level1.m(CCScene与级别1 CCLayer)彼此进行通信 - 保存瓷砖地图和玩家精灵
  • HUDLayer.m(链接到Level1.m的顶部) - 保存所有按钮

如何获取HUDLayer.m中的以下代码以与Level1.m中的player sprite交谈?

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

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

回答

0

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

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

,你不给其他层中的参考存储在任何一层,或者如果你这样做,一定要使它成为一个弱引用这是非常重要的,或者在清除方法中将它们清零。否则,您创建了一个保留周期。

你会发现more info on accessing other nodes here

+0

So @ LearnCocos2D你说的是我的CCScene和CCLayer布局是错误的,我应该使用: 1)Level1Scene.m(CCScene,Level1和HUDLayer的父级) - 保留一些东西但仍然可以解决。 (也许所有无效行动?) 2)Level1.m(Level1 CCLayer) - 拥有平铺地图和玩家精灵。 3)HUDLayer.m(HUDLayer CCLayer) - 保存所有按钮。这是更好的做法吗? – 2013-03-24 22:18:45

1

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

这样你就不必做这个层耦合。

+0

嗨@giorashc只是想知道你是否有任何代码示例?我很新,从样本中学得更快。谢谢! – 2013-03-24 22:37:34

相关问题