Общение между CCLayers в одной сцене

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

  • 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];
          }

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

2 ответа

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

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

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

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

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

Вы найдете больше информации о доступе к другим узлам здесь.

Другие вопросы по тегам