2013-10-31 7 views
6

Ich habe festgestellt, dass die SKNode-Methoden children und childNodeWithName: als Name impliziert nur Ergebnisse von den Kindern direkt unter dem abgefragten Knoten zurückgeben. h. [root children]; wird ein NSArray zurückgeben, das die Knoten @[CUBE1, CUBE2, CUBE3] enthält.Springen zu einem bestimmten SKNode in der Knotenhierarchie

In der Grafik unten möchte ich von der ROOT (SKScene) -Ebene hinunter zu SPHERE2, so dass ich schnell auf diese Knoten Kinder zugreifen kann. Ich hatte gehofft, dass [root childNodeWithName:@"SPHERE2"]; würde die ganze Hierarchie durchqueren und einen Zeiger auf SPHERE2

enter image description here

meine Frage: Gibt es etwas, was ich verpasst haben, die mich an einem bestimmten Punkt in einem Knoten Baum springen lassen (dh unter Verwendung des Knotenname)

I Eigenschaften nutzen könnte Hinweise auf wichtige Positionen im Baum zu speichern und diese dann für den Zugriff verwenden und alle untergeordneten Knoten zu verarbeiten, so dass eine Option ...

Antwort

12

Sie können benutze die Erweiterte Suchsyntax, die in SKNode documentation unter Erweiterte Suchvorgänge beschrieben wird.

Dieses den gesamten Knotenbaum rekursiv für einen Knoten mit dem Namen „SPHERE2“ sucht, von dem Knoten Wurzel beginnen:

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

Wenn Sie den Pfad zu einem bestimmten Knoten kennen, können Sie auch, dass verwenden ganz einfach :

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

Es sollte beachtet werden, wenn Sie diese Knoten häufig benötigen, sollten Sie sie in einem __weak ivar oder weak Eigenschaft zwischenspeichern, da Knoten nach Namen suchen ein Weilchen dauert.

+0

Perfekt, ich weiß nicht, wie ich vermisst habe, dass ich das alles gelesen habe. Vielen Dank Steffen, danke für die Köpfe hoch. – fuzzygoat

+0

OK, aber wie findet man alle Kinder mit dem Namen "MyChildren" des Knotens "Me", während wir nicht wissen, wo "Me" im Baum steht? –

+0

Sie würden "// Me/MyChildren" verwenden, um den gesamten Baum nach Knoten mit dem Namen "MyChildren" zu durchsuchen, die den übergeordneten Namen "Me" haben. –