【问题标题】:SceneKit Physics ContactSceneKit 物理联系人
【发布时间】:2017-03-19 23:14:18
【问题描述】:

我正在尝试为 iPhone 创建一个测试 3D 游戏,但我遇到了物理问题。当汽车和救护车相互接触时,汽车不会消失吗?我以前使用过 SpriteKit,我知道我必须将 PhysicsWorld ContactDelegate 设置为 self,但我不知道如何在 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设置为self:

scene.physicsWorld.contactDelegate = self

【问题讨论】:

    标签: ios swift physics scenekit


    【解决方案1】:

    对于遇到相同问题的每个人: 我忘记设置节点的 PhysicsBody。

    我必须添加的代码:

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

    【讨论】:

      猜你喜欢
      • 2023-04-06
      • 1970-01-01
      • 2014-11-08
      • 2017-06-10
      • 1970-01-01
      • 2016-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多