2015-09-27 3 views
1

Я уже создаю приложение с обнаружением конфликтов с использованием делегата SCNPhysicsContactDelegate. Сейчас я использую Swift 2.0 и Xcode 7, и я пытаюсь обнаружить столкновение с делегатом SCNPhysicsContactDelegate, но он не работает. Что я делаю неправильно? Ниже код:SceneKit Swift 2.0 Обнаружения столкновений (SCNPhysicsContactDelegate)

let CubeType = 1 
let PlayerType = 2 
class GameViewController: UIViewController, SCNSceneRendererDelegate,SCNPhysicsContactDelegate { 

override func viewDidLoad() { 
    super.viewDidLoad() 
    let scnView = self.view as! SCNView 
    scnView.scene = SCNScene() 
    scnView.scene?.physicsWorld.contactDelegate = self 
    let cameraNode = SCNNode() 
    cameraNode.camera = SCNCamera() 
    cameraNode.position = SCNVector3(x: 0, y: 0, z: 5) 
    scnView.scene?.rootNode.addChildNode(cameraNode) 
    scnView.autoenablesDefaultLighting = true 
    scnView.allowsCameraControl = true 
    scnView.showsStatistics = true 
    scnView.backgroundColor = UIColor.blackColor() 

    let g = SCNBox(width: 0.5, height: 0.5, length: 0.5, chamferRadius: 0) 
    let n = SCNNode(geometry: g) 
    n.physicsBody = SCNPhysicsBody(type: .Kinematic, shape: SCNPhysicsShape(geometry: g, options: nil)) 
    n.physicsBody?.categoryBitMask = CubeType 
    n.physicsBody?.collisionBitMask = PlayerType 
    n.position = SCNVector3Make(5, 0, 0) 
    scnView.scene?.rootNode.addChildNode(n) 

    let playerGeometry = SCNSphere(radius: 1) 
    let playerNode = SCNNode(geometry: playerGeometry) 
    playerNode.position = SCNVector3Zero 
    playerNode.physicsBody = SCNPhysicsBody(type: .Kinematic, shape: SCNPhysicsShape(geometry: playerGeometry, options:nil)) 

    playerNode.physicsBody?.categoryBitMask = PlayerType 
    playerNode.physicsBody?.collisionBitMask = CubeType 
    scnView.scene?.rootNode.addChildNode(playerNode) 
    let moveAction = SCNAction.moveTo(n.position, duration: 3) 
    playerNode.runAction(moveAction) 
} 

func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact) { 
    print("-> didBeginContact") 
} 

func physicsWorld(world: SCNPhysicsWorld, didEndContact contact: SCNPhysicsContact) { 
    print("-> didEndContact") 
} 

func physicsWorld(world: SCNPhysicsWorld, didUpdateContact contact: SCNPhysicsContact) { 
    print("-> didupdatecontact") 
} 
+0

это может быть потому, что сцена не имеет физический организм? Как границы? – EDUsta

+0

Сцена не имеет физического тела –

ответ

1

Свойство .contactTestBitMask отсутствующего для обоих узлов:

n.physicsBody?.contactTestBitMask = PlayerType 
playerNode.physicsBody?.contactTestBitMask = CubeType 
+0

Маска, определяющая, какие категории тел вызывают уведомления о пересечении с этим физическим телом. По умолчанию значение 0.On iOS 8 и OS X 10.10 и ниже уведомления о пересечении всегда отправляются, когда происходит столкновение. – Apps