3种不同的碰撞体? Swift3 + Spritekit

3 different collision bodies? Swift3 + Spritekit

好吧,我搜索了一圈,但找不到这个问题的答案。 我有 3 种不同的节点类型要处理冲突。一颗流星,一枪,一站。我有处理镜头和流星之间碰撞的代码,效果很好,但我终生无法弄清楚如何响应碰撞(是的,正在检测碰撞,但没有执行响应代码)站和一颗流星。这是我的 didBegin 函数:

func didBegin(_ contact: SKPhysicsContact){
    print("contact")
    let shot = (contact.bodyA.categoryBitMask == shotCategory) ? contact.bodyA : contact.bodyB
    let stationBody = (contact.bodyA.categoryBitMask == stationCategory) ? contact.bodyA : contact.bodyB
    let otherObject = (shot == contact.bodyA) ? contact.bodyB : contact.bodyA

    if ((contact.bodyA == stationBody) && (contact.bodyB == otherObject)) {
        print("collision!")
    }
}

"contact" 当流星撞击空间站时正在打印,但 "collision!" 没有被打印。我知道它与代码的措辞方式有关,但无论我如何 write/rewrite it

我似乎都无法让它工作

尝试考虑顺序...

 if (contact.bodyA == stationBody && contact.bodyB == otherObject) || (contact.bodyB == stationBody && contact.bodyA == otherObject)

另外你是根据shot设置另一个物体,所以如果shot不是碰撞中的物体之一,那可能是个问题

如果 bodyA 是另一个对象,bodyB 是车站,shot 将设置为 bodyB(因为 categoryBitMask != shotCategory),然后 otherObject 将设置为 bodyA。因此 contact.bodyB 不等于 otherObject.