2013-10-31 5 views
6

名前としてSKNodeのメソッドchildrenchildNodeWithName:は、照会されたノードのすぐ下の子からの結果のみを返すことを意味しています。すなわち[root children];は、ノード@[CUBE1, CUBE2, CUBE3]を含むNSArrayを返します。ノード階層の特定のSKNodeへのジャンプ

下の図では、ROOT(SKScene)レベルからSPHERE2に下がり、そのノードの子にすばやくアクセスできるようにしたいと考えています。私は私の質問

enter image description here

[root childNodeWithName:@"SPHERE2"];は全体の階層を横断しSPHERE2

へのポインタを返すだろうと期待していた:は私が指定されたポイントにノードツリーにジャンプできるようになる私が見逃している何かがあります(つまり、使用してノード名)

私はオプションですので、木の上で重要な位置へのポインタを格納し、アクセスにこれらを使用すると、任意の子ノードを処理するためのプロパティを使用することができ

...

答えて

12

することができます使用 Advanced SearchのSKNode documentationに記載されている高度な検索構文。

これは、ルート・ノードから始まる、「SPHERE2」という名前のノードのために再帰的に全体のノードツリーを検索します:

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

あなたが特定のノードへのパスがわかっている場合、あなたはまた、非常に簡単にそれを使用することができます:

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

あなたが、多くの場合、それらのノードが必要な場合は、名前でノードを検索すると、少し時間がかかるので、あなたが__weak IVARかweakプロパティでそれらをキャッシュすべき注意すべきです。

+0

パーフェクト、私はそれが私はおそらくすべてを読んでいることを逃したか分からない。 Steffenさん、ありがとうございました。 – fuzzygoat

+0

OKですが、 "Me"がどこのツリーに置かれているかわからないうちに、ノード "Me"の "MyChildren"という名前のすべての子を見つける方法はありますか? –

+0

"Me/MyChildren"を使用して、 "Me"という名前の親を持つ "MyChildren"という名前のノードをツリー全体で検索します。 –