2013-03-23 5 views
1

У меня 2 CCLayers, которые нужны для общения друг с другом в отдельных .m файловCommunitacting между CCLayers в одной сцене

  • Level1.m (CCScene с 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]; 
      } 

Пожалуйста, помогите, я застрял на этом в течение нескольких дней. По крайней мере, если кто-то может указать мне в правильном направлении. Благодаря!

ответ

0

Чтобы получить доступ к другому слою, вам нужна ссылка на него. Есть много способов сделать это. В вашем случае просто добавьте одно свойство для каждого слоя в класс CCScene. Слои могут затем получить доступ к сцене через их родителей:

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

Это очень важно, чтобы вы не храните ссылку на другой слой в любом слое, или, если вы это сделаете, убедитесь, чтобы сделать его слабая ссылка , или nil их в методе очистки. В противном случае вы создали цикл сохранения.

Вы найдете more info on accessing other nodes here.

+0

Так что @ LearnCocos2D, что вы говорите, что моя схема CCScene и CCLayer ошибочна, и я должен использовать: 1) Level1Scene.m (CCScene, родительский уровень Level1 и HUDLayer) - держит что-то, но все еще работает. (Может быть, все недействительные действия?) 2) Level1.m (Level1 CCLayer) - удерживает кривую карту и игровой спрайт. 3) HUDLayer.m (HUDLayer CCLayer) - удерживает все кнопки. Это лучшая практика? –

1

Я бы посоветовал вам использовать объект сцены для управления связью между его слоями. Вы можете создать протокол HUD и установить сцену в качестве ее делегата. И для каждого события HUD сцена будет реагировать соответственно, обращаясь к соответствующему слою (сохраненному как его член).

Таким образом, вам не придется выполнять эту связь.

+0

Привет @giorashc просто интересно, если у вас есть образцы кода для этого? Я очень новичок и быстрее учился у образцов. Благодаря! –