2
我是IOS开发新手,目前在didBeginContact方法中遇到sprite套件冲突问题。Sprite Kit碰撞错误 - Swift
如果碰撞的物理体中的一个被移除,我该如何摆脱或停止运行didBeginContact。 例如: 1颗子弹与2个重叠的敌人相撞。由于子弹击中敌人并被摧毁,所以在第二个敌人上运行的冲突检定会引发异常,因为子弹不再存在。
我试过检查零和NSNULL值没有运气。 我收到的错误代码是“线程1:EXC_BAD_INSTRUCTION(代码= EXC_I386_INVOIP,子代码= 0x0)”,并且在尝试检查类别位掩码时发生(因为鱼雷不再存在)。
CODE:
var bodyA:SKPhysicsBody = contact.bodyA
var bodyB:SKPhysicsBody = contact.bodyB
if(contact.bodyA.categoryBitMask == alienCategory && contact.bodyB.categoryBitMask == alienCategory){
return
}
if((bodyA.categoryBitMask == alienCategory) && (bodyB.categoryBitMask == photonTorpedoCategory)){
torpedoDidCollideWithAlien(bodyA.node as SKSpriteNode)
}
var currTorpedo:SKSpriteNode = contact.bodyB.node as SKSpriteNode
var currAlien:SKSpriteNode = contact.bodyA.node as SKSpriteNode
currTorpedo.removeFromParent()
currAlien.removeFromParent()
}
func torpedoDidCollideWithAlien(alien:SKSpriteNode){
aliensDestroyed++
label.text = ("Current Score: " + String(aliensDestroyed))
}
谢谢,这似乎工作得很好。 – Panno123
这个答案也是相关的:http://stackoverflow.com/a/24627961/1510181 – Jon