didBeginContactメソッドで衝突を検出する方法をいくつか試しましたが、どれが効率的であるかはわかりません。フレームレートの低下を減らそうとしています。効率的に衝突を検出する
方法1:
if let thisMine = nodeA as? Mine {
if let thisPlayer = nodeB as? Player {
thisMine.explode()
thisPlayer.takeDamage(thisMine.damage)
}
}
else if let thisMine = nodeB as? Mine {
if let thisPlayer = nodeA as? Player {
thisMine.explode()
thisPlayer.takeDamage(thisMine.damage)
}
}
私が相互作用することができます異なるオブジェクトがたくさんあるので、私はこれにdidBeginContact方法で異なるクラスを使用して時間の束をやっています。 (変更とスティーブ・アイヴスによって推奨)
方法2:この方法で
let contactMask = contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask
switch contactMask {
case CollisionCategoryPlayer | CollisionCategoryMine:
let mineNode = contact.bodyA.categoryBitMask == CollisionCategoryMine ? contact.bodyA.node as! Mine : contact.bodyB.node as! Mine
let playerNode = contact.bodyA.categoryBitMask == CollisionCategoryPlayer ? contact.bodyA.node as! Player : contact.bodyB.node as! Player
mineNode.explode()
playerNode.takeDamage(mineNode.damage)
default :
print("Unregistered contact")
}
、Iは、それらの特性及び機能にアクセスするためにプレーヤ/鉱山/他のクラスとして接触体ノードをキャストする必要が。これは、方法1のようにノードのクラスを比較するより効率的ですか? if文の束ではなくswitch文を使う方が効率的だと思いますか?
注:この2つのクラスよりも多い場合は、間違いなく衝突が頻繁に発生する場合は方法2で行くか、する必要があり、これはMost Efficient Way to Check Collisions in didBeginContact
「ベストプラクティス」の質問は、スタックオーバーフローには適していない可能性があります。おそらく、コードレビューの交換を依頼してください。 http://codereview.stackexchange.com/注意:「このコードはベストプラクティスに従っていますか?」ではなく、「ベストプラクティスは何ですか?」と尋ねる必要があります – Knight0fDragon