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

时间:2016-10-25 03:32:20

标签: swift skphysicsbody collision

好的,我已经四处寻找,但我找不到这个问题的答案。 我有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!")
    }
}

"接触"当流星与车站相撞时正在打印,但是#34;碰撞!"没有打印。我知道它与代码的措辞有关,但无论我如何编写/重写它,我似乎都无法工作

1 个答案:

答案 0 :(得分:0)

尝试考虑订单......

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

此外,您正在根据镜头设置其他对象,因此如果镜头不是碰撞中的其中一个对象,则可能是个问题

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