Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Jumping to a specific SKNode in node hierarchy

I have noticed that the SKNode methods children and childNodeWithName: as the name implies only return results from the children directly below the queried node. i.e. [root children]; will return an NSArray containing the nodes @[CUBE1, CUBE2, CUBE3].

In the diagram below I want to get from the ROOT (SKScene) level down to SPHERE2 so that I can quickly access that nodes children. I was hoping that [root childNodeWithName:@"SPHERE2"]; would traverse the whole hierarchy and return a pointer to SPHERE2

enter image description here

MY QUESTION: Is there something that I have missed that will let me jump into a node tree at a specified point (i.e. using the node name)

I could use properties to store pointers to important positions in the tree and then use these to access and process any child nodes, so that is an option ...

like image 394
fuzzygoat Avatar asked Oct 31 '13 15:10

fuzzygoat


1 Answers

You can use the advanced search syntax described in the SKNode documentation, under Advanced Searches.

This will search the entire node tree recursively for a node named "SPHERE2", starting from the root node:

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

If you know the path to a specific node, you can also use that quite easily:

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

It should be noted if you need those nodes often, you should cache them in a __weak ivar or weak property because searching nodes by name takes a little while.

like image 117
LearnCocos2D Avatar answered Sep 23 '22 18:09

LearnCocos2D