2016-06-23 21 views
-1

SpriteKitのdidBeginContactメソッドを使用して衝突をチェックする最良の方法は何ですか?私は現在、クラスによってチェックすると、このような何かをやっている:私はお互いに対話することができ、異なるオブジェクトがたくさんあるので、私はdidBeginContact方法でこれを何回の束をやってるdidBeginContactで衝突をチェックする最も効率的な方法

if let thisMine = nodeA as? Mine { 
    if nodeB is Player { 
     thisMine.explode() 
    } 
} 
else if let thisMine = nodeB as? Mine { 
    if nodeA is Player { 
     thisMine.explode() 
    } 
} 

。ビットマスクでチェックする方が効率的ですか?また、nodeAとnodeBを同じクラスとしてチェックすることによって、基本的にすべてのコードを複製する必要性を減らす方法はありますか?

+0

SOしかめ面。あなたはこれを新しい質問として尋ねるほうが良いでしょう - どちらのアプローチを使ってコードを投稿し、どちらが「望ましいテクニック」であるかを尋ねてください。 –

答えて

2

使用カテゴリのビットマスク:1つのポストに2つの質問をする時に

func didBeginContact(contact: SKPhysicsContact) { 
     let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask 

     switch contactMask { 

     case categoryBitMask.player | categoryBitMask.thisMine: 
      print("Collision between player and thisMine") 
      let mineNode = contact.bodyA.categoryBitMask == categoryBitMask.thisMine ? contact.bodyA.node! : contact.bodyB.node! 
      mineNode.explode() 

     default : 
      //Some other contact has occurred 
      print("Some other contact") 
    } 
} 
関連する問題