2016-08-31 20 views
0

私の衝突が検出されない理由を理解できません。なぜそれが私に多くの問題を引き起こしているのかを知ることができれば幸いです。スウィフト、シーンキット。よしSceneKit衝突検出が検出されていません

私はこの文から始めるいつもように:

override func viewDidLoad() { 
    super.viewDidLoad() 


    createScene() 



    scene.physicsWorld.contactDelegate = self 

    // This Statement.^ 

    motionManager = CMMotionManager() 
    motionManager.startAccelerometerUpdates() 


} 

私は衝突がボールとボックスノードとの間に発生します。私のボックスノードはmainBoxで、私のボールは...ボールです。 bodyNamesはどこから来る

ball.position = SCNVector3Make(0, 1.75, 3) 
    ball.geometry = ballGeometry 
    ballMaterial.diffuse.contents = UIColor.greenColor() 
    ballGeometry.materials = [ballMaterial] 
    scene.rootNode.addChildNode(ball) 
    ball.physicsBody = SCNPhysicsBody(type: .Dynamic, shape: SCNPhysicsShape(geometry: ballGeometry, options: nil)) 
    ball.physicsBody?.angularVelocityFactor = SCNVector3Make(0, 0, 0) 
    ball.physicsBody?.angularVelocity = SCNVector4Make(0, 0, 0, 0) 
    ball.name = "sphere" 
    ball.physicsBody?.categoryBitMask = bodyNames.Person 
    ball.physicsBody?.contactTestBitMask = bodyNames.Floor 
    ball.physicsBody?.collisionBitMask = bodyNames.Floor 
    ball.physicsBody?.affectedByGravity = true 
    ball.addChildNode(cameraNode) 


    mainBox.position = SCNVector3Make(0, -0.75, 2) 
    mainBox.geometry = mainBoxGeometry 
    mainBoxMaterial.diffuse.contents = UIColor.whiteColor() 
    mainBox.physicsBody?.categoryBitMask = bodyNames.Floor 
    mainBox.physicsBody?.contactTestBitMask = bodyNames.Person 
    mainBox.physicsBody?.collisionBitMask = bodyNames.Person 
    mainBox.physicsBody = SCNPhysicsBody.staticBody() 
    mainBoxGeometry.materials = [mainBoxMaterial] 
    mainBox.name = "floor" 
    scene.rootNode.addChildNode(mainBox) 

そして今、マジックが起こるところが、また、魔法が起きていない...

func physicsWorld(world: SCNPhysicsWorld, didBeginContact contact: SCNPhysicsContact) { 

    let nodeA = contact.nodeA 
    let nodeB = contact.nodeB 

    if nodeA.physicsBody?.categoryBitMask == bodyNames.Person && nodeB.physicsBody?.categoryBitMask == bodyNames.Floor || nodeA.physicsBody?.categoryBitMask == bodyNames.Floor && nodeB.physicsBody?.categoryBitMask == bodyNames.Person { 


     print("I collided with the damn box.") 

    } 

} 

ああ、これの事はあります。

答えを得るためにコードを追加する必要がある場合はお知らせください。

+2

physicsBodyかどうかを確認する必要がありますmainBox' physicsBodyを設定してからphysicsBody自体を設定してください。 –

+0

非常に単純な修正ですが、今は正しく動作します。ありがとう。 @ JamesP –

答えて

0

didBeginContactが訪問したかどうかを確認しましたか?

訪問した場合、チェックすると条件

nodeA.physicsBody?.categoryBitMask == bodyNames.Person && nodeB.physicsBody?.categoryBitMask == bodyNames.Floor || nodeA.physicsBody?.categoryBitMask == bodyNames.Floor && nodeB.physicsBody?.categoryBitMask == bodyNames.Person 

全く訪れていない場合は、uはあなたが `上のすべてのビットマスクを設定している世界、ボックス、正しくボールコンフィグ

+0

didBeginContactは何らかの理由で呼び出されていません。 –