好的,我已经四处寻找,但我找不到这个问题的答案。 我有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;碰撞!"没有打印。我知道它与代码的措辞有关,但无论我如何编写/重写它,我似乎都无法工作
答案 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。