2016-11-06 2 views
2

J'essaie de créer un jeu de test 3D pour l'iPhone, mais je suis coincé avec la physique. Lorsque la voiture et l'ambulance entrent en contact, la voiture ne disparaît pas? J'ai déjà travaillé avec SpriteKit et je sais que je devais configurer le ContactDelegate de PhysicsWorld mais je ne sais pas comment le faire dans SceneKit, c'est peut-être le problème?SceneKit Physics Contact

code:

ambulance.physicsBody?.categoryBitMask = PhysicsCategory.ambulance 
ambulance.physicsBody?.contactTestBitMask = PhysicsCategory.car 

car.physicsBody?.categoryBitMask = PhysicsCategory.car 


func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) { 
    let firstNode = contact.nodeA 
    let secondNode = contact.nodeB 

    if(firstNode.physicsBody?.categoryBitMask == PhysicsCategory.ambulance && secondNode.physicsBody?.categoryBitMask == PhysicsCategory.car || 
     firstNode.physicsBody?.categoryBitMask == PhysicsCategory.car && secondNode.physicsBody?.categoryBitMask == PhysicsCategory.ambulance){ 

     firstNode.physicsBody?.categoryBitMask = PhysicsCategory.ambulance 
     secondNode.physicsBody?.categoryBitMask = PhysicsCategory.car 

     secondNode.removeFromParentNode() 
    } 
} 

J'espère que quelqu'un peut me aider! Merci!

EDIT: J'ai trouvé comment régler le contactDelegate de la scène à l'auto:

scene.physicsWorld.contactDelegate = self 

Répondre

1

Pour tous ceux qui ont le même problème: J'ai oublié de régler la PhysicsBody de mon nœud.

code que je devais ajouter:

ambulance.physicsBody = SCNPhysicsBody.dynamic() 
ambulance.physicsBody?.isAffectedByGravity = false 

car.physicsBody = SCNPhysicsBody.static()