Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SceneKit问题中的碰撞检测_Ios_Swift_Collision Detection_Scenekit - Fatal编程技术网

Ios SceneKit问题中的碰撞检测

Ios SceneKit问题中的碰撞检测,ios,swift,collision-detection,scenekit,Ios,Swift,Collision Detection,Scenekit,我对碰撞检测有一些问题。我想在控制台中查看是否检测到碰撞 当生成节点时,我会在控制台中看到它们有什么类型的categoryBitMask,所以肯定没有问题。还设置了碰撞掩码和contactBitMask 因此,对象之间的交互没有问题 如果我换了面具,它们就会停止相互作用,所以它们会互相穿过。所以我可以说面具设置得很好。 使用辅助对象结构设置的遮罩: struct BitMaskCategory: OptionSet { let rawValue: Int static let

我对碰撞检测有一些问题。我想在控制台中查看是否检测到碰撞

当生成节点时,我会在控制台中看到它们有什么类型的categoryBitMask,所以肯定没有问题。还设置了碰撞掩码和contactBitMask

因此,对象之间的交互没有问题

如果我换了面具,它们就会停止相互作用,所以它们会互相穿过。所以我可以说面具设置得很好。 使用辅助对象结构设置的遮罩:

struct BitMaskCategory: OptionSet {
    let rawValue: Int

    static let none    = BitMaskCategory(rawValue: 0 << 0) // 0 
    static let box     = BitMaskCategory(rawValue: 1 << 0) // 1
    static let plane   = BitMaskCategory(rawValue: 1 << 1) // 2
}
之后,我尝试使用方法,但它甚至没有被调用:

func physicsWorld(_ world: SCNPhysicsWorld, didBegin contact: SCNPhysicsContact) {
    if contact.nodeB.physicsBody?.contactTestBitMask == 1 {
        print("NodeB has mask = 1")
    } else {
        print("NodeB has mask != 1")
    }
}
之后,我按屏幕上,看到立方体来了,击中了飞机表面,但并没有任何接触检测。委托方法physicsWorld\uworld:SCNPhysicsWorld,didbegen contact:SCNPhysicsContact甚至根本不被调用

我想念什么


谢谢大家!

经过多小时的调试挑战后,我发现我在设置委托后重写了场景

是:

应该是:

    let scene = SCNScene()
    sceneView.scene = scene

    sceneView.scene.physicsWorld.contactDelegate = self
就我而言,这解决了问题。
希望有人能用这个来节省时间:

经过多小时的调试挑战后,我发现我在设置委托后重写了场景

是:

应该是:

    let scene = SCNScene()
    sceneView.scene = scene

    sceneView.scene.physicsWorld.contactDelegate = self
就我而言,这解决了问题。 希望有人能节省时间:

    let scene = SCNScene()
    sceneView.scene = scene

    sceneView.scene.physicsWorld.contactDelegate = self