J'essaie d'obtenir ma tête autour de la façon dont fonctionne la détection de collision lors de la mise énumérations. J'ai plusieurs noeuds différents sur lesquels je peux détecter une collision et je me suis mis au travail, mais je viens juste de l'aileronner et je ne comprends pas comment l'installer correctement.Swift détection des collisions et la mise énumérations
enum ColliderType: UInt32{
case ship = 1
case object = 2
case fuel = 4
case alien = 8
case torp = 16
}
J'ai chaque nœud mis en place en tant que tel:
mete.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
mete.physicsBody!.categoryBitMask = ColliderType.object.rawValue
mete.physicsBody!.collisionBitMask = ColliderType.object.rawValue
alien.physicsBody!.contactTestBitMask = ColliderType.torp.rawValue
alien.physicsBody!.categoryBitMask = ColliderType.alien.rawValue
alien.physicsBody!.collisionBitMask = ColliderType.alien.rawValue
fuel.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue
fuel.physicsBody!.categoryBitMask = ColliderType.fuel.rawValue
fuel.physicsBody!.collisionBitMask = ColliderType.fuel.rawValue
ship.physicsBody!.contactTestBitMask = ColliderType.object.rawValue
ship.physicsBody!.categoryBitMask = ColliderType.ship.rawValue
ship.physicsBody!.collisionBitMask = ColliderType.ship.rawValue
torpedoNode.physicsBody!.contactTestBitMask = ColliderType.alien.rawValue
torpedoNode.physicsBody!.categoryBitMask = ColliderType.torp.rawValue
torpedoNode.physicsBody!.collisionBitMask = ColliderType.alien.rawValue
ensuite pour détecter une collision entre le navire et un mete le code suivant est ce que j'utilise:
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue
Une collision entre le navire et le carburant que j'utilise:
if contact.bodyA.categoryBitMask == ColliderType.fuel.rawValue || contact.bodyB.categoryBitMask == ColliderType.fuel.rawValue {
Puis, finalement, une collision entre une torpille et alien j'utiliser ce code:
if contact.bodyA.categoryBitMask == ColliderType.alien.rawValue || contact.bodyB.categoryBitMask == ColliderType.torp.rawValue {
Tout fonctionne parfaitement mais je suis en train maintenant de détecter une collision entre le navire et étranger et je ne peux pas travailler sur la façon d'aller à propos de le faire. Je dois essayer de comprendre la logique et nettoyer ce code.
Qu'est-ce que vous avez comme « ColliderType » est juste une catégorie de physique. Définir une catégorie sur collisionBitMask et contactTestBitMask n'a pas vraiment de sens. –
Il ya beaucoup de réponses ici sur SO qui expliquent ce qui vous intéresse: http://stackoverflow.com/a/39064710, http://stackoverflow.com/a/31111039 etc ... – Whirlwind
Tout d'abord, prenez votre tête la différence entre ** contacts ** et ** collisions ** et commencer à utiliser la terminologie correcte - vous ne détectez pas les collisions, vous détectez * contacts * .- http://stackoverflow.com/documentation/sprite-kit/6261/sknode-collision/29294/différence-entre-contacts-et-collisions # t = 201703220900020381008 –