Общение между 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];
Очень важно, чтобы вы не сохранили ссылку на другой слой в каком-либо слое, или, если вы это сделаете, убедитесь, что сделали его слабой ссылкой, или обнулите их в методе очистки. В противном случае вы создали цикл сохранения.
Вы найдете больше информации о доступе к другим узлам здесь.