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.
好吧,我搜索了一圈,但找不到这个问题的答案。 我有 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.