У меня есть сцена cocos2d, в которой есть несколько дочерних объектов, составляющих экран. Некоторые из этих дочерних объектов должны взаимодействовать друг с другом, чтобы дисплей мог обновляться.
Я решил, что вместо передачи ссылок на объекты в графе сцены я буду отмечать все узлы cocos2d, передавать значения тегов вокруг, а затем всякий раз, когда мне понадобится объект сцены, я просто использую директор для извлечения объекта с использованием тег.
Это означает, что у меня не так много ссылок на летающие объекты, и я подумал, что это будет чище и с меньшей вероятностью вызовет проблемы с памятью при сохранении объектов, когда их не должно быть.
Я использую следующий код для извлечения определенного узла:
CCNode* node = [[[[CCDirector sharedDirector] runningScene] getChildByTag:TAG_MY_LAYER] getChildByTag:TAG_MY_OBJECT];
if (node != nil ){
NSAssert([node isKindOfClass:[myObject class]], @"node is not a myObject");
myObject* mo = (myObject*)node;
...
other stuff
....
Проблема: когда сцена инициализируется с переходом, тогда этот метод не работает. Вызов бегущей сцены возвращает переход, а не новую сцену. Если вы ждете - onEnterTransitionDidFinish, то он все равно не будет работать. Похоже, что вам нужно немного подождать после этого (предположительно, чтобы старая сцена была уничтожена), прежде чем переход будет удален, и вы запустите Scene - ваша новая сцена.
Можно ли получить ссылку на часть графа сцены, из которой я могу вызвать getChildByTag, и он получит мой помеченный объект независимо от состояния перехода сцен?