2017-03-25 1 views
0

J'ai plusieurs collisions configurées fonctionnant parfaitement dans mon application mais je ne peux pas pour la vie de moi obtenir les 2 collisions finales pour travailler sur le même nœud.Swift SpriteKit Configurer des collisions/contacts bitmasques avec 3 nœuds

Voici ce que j'ai:

alien.physicsBody!.contactTestBitMask = ColliderType.object.rawValue 
alien.physicsBody!.categoryBitMask = ColliderType.object.rawValue | ColliderType.torp.rawValue 
alien.physicsBody!.collisionBitMask = ColliderType.object.rawValue 

ship.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue | ColliderType.object.rawValue 
ship.physicsBody!.categoryBitMask = ColliderType.ship.rawValue 
ship.physicsBody!.collisionBitMask = ColliderType.ship.rawValue 


torpedoNode.physicsBody!.contactTestBitMask = ColliderType.torp.rawValue 
torpedoNode.physicsBody!.categoryBitMask = ColliderType.torp.rawValue 
torpedoNode.physicsBody!.collisionBitMask = ColliderType.torp.rawValue 

Comme le code est au-dessus, les contacts avec l'étranger Torp. Cependant, le navire ne contacte pas l'étranger.

Si je supprime "ColliderType.torp.rawValue" de la catégorie alienBitMask alors le navire DOIT contacter l'étranger, mais le torp ne contacte PAS le navire.

Pour le navire à contacter étranger J'utilise:

if contact.bodyA.categoryBitMask == ColliderType.object.rawValue || contact.bodyB.categoryBitMask == ColliderType.object.rawValue 

Et pour le Torp à contacter l'étranger que j'utilise:

if contact.bodyA.categoryBitMask == ColliderType.torp.rawValue || contact.bodyB.categoryBitMask == ColliderType.torp.rawValue { 

Comment puis-je obtenir à la fois pour travailler ?! J'ai passé des jours et je n'arrive pas à comprendre.

Je peux obtenir l'un ou l'autre pour fonctionner parfaitement pas tous les deux ensemble.

+0

Avez-vous essayé de changer étrangers contact Torp et étranger? De plus, le masque de bits de la catégorie des extraterrestres doit être défini sur l'objet. – sicvayne

+0

Désolé @sicvayne il y avait une erreur dans le code. Pour que le navire puisse contacter l'extraterrestre, il devrait être "Objet" "Objet". Il a été révisé –

+0

Comme il est au-dessus du navire ne sera pas en contact avec alien à moins que je supprime le haut de la catégorie des étrangers. Mais en faisant cela, le torp et l'alien ne se heurtent pas. –

Répondre

1

Pour quelqu'un ayant le même problème, dans ce cas @Alex Ingram voulait que l'extraterrestre entre en collision avec le navire et la torpille, voici la solution qui l'a aidé.

alien.physicsBody!.contactTestBitMask = ColliderType.ship.rawValue | ColliderType.torp.rawValue 
alien.physicsBody!.categoryBitMask = ColliderType.object.rawValue //Im assuming this is his alien's BitMask 
alien.physicsBody!.collisionBitMask = none 

Puis, en didBeginContact il a dû écrire ce qui suit

//alien contacting the torpedo 
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue && contact.bodyB.categoryBitMask == ColliderType.torp.rawValue{ 
    //then do the following 
    } 
//alien contacting the ship 
if contact.bodyA.categoryBitMask == ColliderType.object.rawValue && contact.bodyB.categoryBitMask == ColliderType.ship.rawValue{ 
     //then do the following 
     }