2016-11-06 2 views
2

Я пытаюсь создать тестовую 3D-игру для iPhone, но я застрял в физике. Когда автомобиль и скорая помощь контактируют друг с другом, автомобиль не исчезает? Я работал с SpriteKit раньше, и я знаю, что мне нужно было установить физический контакт ContactDelegate, но я не знаю, как это сделать в SceneKit, может быть, это проблема?SceneKit Physics Контакт

Код:

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() 
    } 
} 

Я надеюсь, что кто-то может мне помочь! Благодаря!

EDIT: Я нашел, как установить contactDelegate сцены к себе:

scene.physicsWorld.contactDelegate = self 

ответ

1

Для всех, кто имеет такую ​​же проблему: я забыл установить PhysicsBody моего узла.

код, который я должен был добавить:

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

car.physicsBody = SCNPhysicsBody.static()