J'ai essayé deux méthodes différentes pour détecter les collisions dans la méthode didBeginContact, mais je ne suis pas sûr de savoir laquelle est la plus efficace - j'essaie de réduire mes chutes de fréquence d'images.Détection efficace des collisions
Méthode 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)
}
}
Je fais cela un tas de fois en utilisant différentes classes dans la méthode didBeginContact parce que j'ai beaucoup d'objets différents qui peuvent interagir les uns avec les autres.
Méthode 2 (suggérée par Steve Ives avec des modifications):
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")
}
Avec cette méthode, je dois jeter les nœuds du corps de contact en tant que joueur/moi/autre classe afin d'accéder à leurs propriétés et fonctions . Est-ce encore plus efficace que de comparer les classes du nœud comme dans la méthode 1? J'imagine qu'il est plus efficace d'utiliser l'instruction switch plutôt qu'un tas d'instructions if?
Note: ceci est une question de suivi à Most Efficient Way to Check Collisions in didBeginContact
Les questions sur les «meilleures pratiques» ne sont pas adaptées au débordement de la pile, essayez peut-être de demander l'échange de révision de code. http://codereview.stackexchange.com/ Note: vous devez demander 'Est-ce que ce code suit les meilleures pratiques?', pas 'Quelle est la meilleure pratique?' – Knight0fDragon