2016-09-05 11 views
2

私はいくつかの完成していないサークルが常に回転していて、サークルからサークルに向かっています。 私はすべての重力を削除し、軍など私のシーンからSpriteKit:enumerateBodiesAtPointが正しいボディを表示していません

画像 Image A

イメージ・B Image B

問題:私は、ユーザーがどこにあるか私はちょうどチェックヒット検出を行うにしようとしています、私のシーンの物理世界のこの時点でSKNodeのボディがあるかどうかを確認します。シェイプがヒットした場合、ユーザーは続行できます(イメージA)。外に出ると失敗します(イメージB)

シェイプはかなり複雑ですが、scene.showPhysicsは自分のシェイプと正確に一致しているようです。 (画像A及びBを参照)

Shape contains Optional("User") 
Shape contains Optional("circle") 
Shape contains Optional("circle") 
Shape contains Optional("circle") 
Shape contains Optional("circle") 
Shape contains Optional("Scene") 

それは、正しくユーザシーンを印刷するだけでなく、唯一のこの時点でものがなければならない場合には、周りのすべての円の形状を印刷する印刷

let updatedOrigin = user.calculateAccumulatedFrame().origin 
     user.scene?.physicsWorld.enumerateBodiesAtPoint(updatedOrigin, usingBlock: { (body, stop) in 
      print(" Shape contains \(body.node!.name)") 
}) 

またはなし。ノードはそこにありますが、ボディの物理学は当てられません。

なぜ1に一致するか、または1に一致しないようにする必要がある場合、すべてのサークルのヒットを示すアイデアですか?ありがとう!

編集:追加情報 - user.physicsBody?.allContactedBodies() を使用しているとき、私は同様の結果を持っていた - 私は私の回転ノード

+0

バグレポートを提出してもよろしいですか? – 0x141E

+0

これはまだiOS 10 GMのケースであるかどうか知っていますか?試してみるとすぐに解答としてマークされます。 –

答えて

2

のPhysicsBodyを作成するためにCGPathにを使用しています、私は物理学と3つの円弧を含むシーンでの簡単なテストプロジェクトを作成しました各弧の境界ボックスを識別する3つの矩形形状ノードを含む。次に、タップポイントに小さな円を配置するタッチハンドラと、タッチ位置をパラメータとしてenumerateBodiesAtPointによって返されるノードを識別するラベルを追加しました。下の図は、シーンのさまざまな場所でのタップの結果を示しています。テスト結果から、

enter image description here

は、それが物理体が指定された点が含まれているかどうenumerateBodiesAtPointはどのように決定するかは明らかではありません。しかし、その方法がそのdocumentationと一貫していないことは明らかです。私はあなたのアプリでそれを使用することを避けることをお勧めします。

また、あなたがSpriteKitベースの組み込みの接触検出を使用することができます。ポイントはCGPathContainsPointを使用してCGPath内であれば

class GameScene: SKScene, SKPhysicsContactDelegate { 
    override func didMoveToView(view: SKView) { 
     self.physicsWorld.contactDelegate = self 
    } 

    func didBeginContact(contact: SKPhysicsContact) { 
     // Handle contacts between physics bodies here 
    } 
} 

また、テストすることができます。ここでは、円弧状の物理学の本体を作成するために使用したパスを繰り返し処理する必要があります。下の図は、enumerateBodiesAtPointの代わりにCGPathContainsPointを使用しているテストプロジェクトの結果を示しています。テストポイントをconvertPointで適切な座標空間に変換してから、CGPathContainsPointに渡す必要があります。

enter image description here

関連する問題