Переход к определенному SKNode в иерархии узлов

Я заметил, что методы SKNode children и childNodeWithName:, как следует из названия, возвращают результаты только от дочерних элементов непосредственно под запрашиваемым узлом. то есть [root children]; вернет NSArray, содержащий узлы @[CUBE1, CUBE2, CUBE3].

На диаграмме ниже я хочу перейти от уровня ROOT (SKScene) к SPHERE2, чтобы я мог быстро получить доступ к этим дочерним узлам. Я надеялся, что [root childNodeWithName:@"SPHERE2"]; пройдет всю иерархию и вернет указатель на SPHERE2.

введите здесь описание изображения

МОЙ ВОПРОС: есть ли что-то, что я пропустил, что позволит мне перейти в дерево узлов в указанной точке (т. е. используя имя узла)

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


person fuzzygoat    schedule 31.10.2013    source источник


Ответы (1)


Вы можете использовать синтаксис расширенного поиска, описанный в документация SKNode в разделе "Расширенный поиск".

Это будет рекурсивно искать во всем дереве узлов узел с именем "SPHERE2", начиная с корневого узла:

SKNode* sphere2 = [root childNodeWithName:@"//SPHERE2"];

Если вы знаете путь к определенному узлу, вы также можете легко его использовать:

SKNode* triangle3 = [root childNodeWithName:@"/CUBE3/SPHERE2/TRIANGLE3"];

Следует отметить, что если вам часто нужны эти узлы, вы должны кэшировать их в свойстве __weak ivar или weak, потому что поиск узлов по имени занимает некоторое время.

person LearnCocos2D    schedule 31.10.2013
comment
Отлично, я не знаю, как я пропустил, что я якобы все это прочитал. Большое спасибо Штеффену, спасибо за внимание. - person fuzzygoat; 31.10.2013
comment
Хорошо, но как найти всех детей с именем MyChildren узла Me, если мы не знаем, где Me находится в дереве? - person Krzysztof Przygoda; 05.03.2015
comment
Вы должны использовать //Me/MyChildren для поиска по всему дереву узлов с именем MyChildren, у которых есть родитель с именем Me. - person Graham Perks; 02.11.2015