2016-04-06 15 views
1

iOS上のSpriteKitアプリケーションで物理的なやりとり(衝突や連絡先)の概要を表示するヘルパーメソッドを作成しています。iOS enumerateChildNodeswithNameですべての物理機関にアクセスする

私は私のヘルパー関数でaddChild()

経由(self.physicsBody = SKPhysicsBody(edgeLoopFromRect: frame)から)の境界で、簡単なシーンを持っており、3つの単純な形状(2つの四角と丸)ウィッヒがシーンに追加され、私はすべて検索しますそれらがphysicsBodyを持っている場合は、そのカテゴリ、collisionおよびcontactTestビットマスクを出力します。

私は次のコード場合

enumerateChildNodesWithNeme("*") { node, _ in { 
    print("Node: \(node.name)") 
} 

、私は取得のみ3つの形状が記載されている:

Node: Optional("shape_blueSquare") 
Node: Optional("shape_redCircle") 
Node: Optional("shape_purpleSquare") 

マイシーンのphysicsBodyが返されません。私が使用している場合でも:

enumerateChildNodesWithNeme("..") { node, _ in { 
    print("Node: \(node.name)") 
} 

その後、私が取得:

Node: Optional("shape_edge") 

私が使用している場合:

enumerateChildNodesWithNeme("..//") { node, _ in { 
    print("Node: \(node.name)") 
} 

私は、これは、ノードツリーを上に移動するだろうと思ったのに対し、私は、何も得ますすべての子を再帰的に返します。検索引数"//*"は3人の子供だけを返します。

いつも、skView.showNodecount = trueで表示されるノード数は4です。

私の質問は:シーン(シーン自体を含む)内のすべてのノードを返すenumerateChildNodesWithNameの検索引数がありますか、シーンとその子供の関係を誤解していますか?両方を検索しますか?私がselfまたはそのような変形を見ると予想していたときにがnilを返すので、後者かもしれません。

+0

これは、それが動作する方法である、と私のコードは、すべて見つける場合シーンの物理学のボディ以外の物理的なボディは、それでいいです - 私はそれを別々に扱うことができます。私はちょうど私が他の何かを潜在的に欠いているのではないことを確認したい。 –

+1

'print(" \(parent.children) ")'のようなものを印刷すると、常にnilになります。ここでは、暗黙の自己は 'GameScene'またはそれに類するものと仮定します。あなたは(ドキュメントによると(https://developer.apple.com/library/ios/documentation/SpriteKit/Reference/SKScene_Ref/))、シーンはルートノードなので、親がいる。たとえば、親からシーンを削除することはできません( 'self.parent'プロパティは常に現在のシーンである' nil'です)。したがって、 'self.removeFromParent()'のようなものは効果がありません。 – Whirlwind

+0

@Whirlwind - 意味があります - ありがとう。 –

答えて

2

これが私の仕事:

enumerateChildNodesWithName("//.") { (node, _) -> Void in 
    print("Node: \(node.name)") 
} 

は約//:検索文字列の先頭に置かれたとき

、これは 検索がルートノードで開始しなければならないと実行されることを指定しますノードツリー全体にわたって再帰的に

について.

は、現在のノードを指します。

(指定した矩形内のすべての物理学の遺体を見つけたい場合)また、これは同様にあなたのために働くかもしれない:

self.physicsWorld.enumerateBodiesInRect(frame) { (body, _) -> Void in 
    print(body.node?.name) 
} 
+0

電車の家でそれを試してみました。 //との説明が納得いかない。しかしオペレータはこの状況で論理的です。 –

関連する問題