2016-11-06 44 views
2

我想爲iPhone創建一個測試3D遊戲,但我堅持物理。當汽車和救護車相互接觸時,汽車不會消失?我之前和SpriteKit一起工作過,並且我知道必須將PhysicsWorld ContactDelegate設置爲self,但我不知道如何在SceneKit中執行此操作,也許這是問題所在?SceneKit物理聯繫人

代碼:

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

我希望有人能幫幫我!謝謝!

編輯:我已經找到了如何到現場的contactDelegate設置爲自:

scene.physicsWorld.contactDelegate = self 

回答

1

大家誰都有同樣的問題: 我忘了把我的節點的PhysicsBody。我有

代碼添加:

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

car.physicsBody = SCNPhysicsBody.static()