我是 IOS 开发新手,目前在 didBeginContact 方法中遇到一些 Sprite 套件冲突问题。
如果其中一个碰撞的物理实体被移除,我如何脱离或停止 didBeginContact 运行。
例如:
1 颗子弹与 2 个重叠的敌人相撞。因为子弹击中敌人并被摧毁,对第二个敌人运行的碰撞检查会抛出异常,因为子弹不再存在。
我尝试检查 nil 和 NSNULL 值,但没有成功。
我收到的错误代码是“线程 1:EXC_BAD_INSTRUCTION(code=EXC_I386_INVOIP,subcode=0x0)”,在尝试检查类别位掩码时发生(因为鱼雷不再存在)。
代码:
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))
}
Best Answer-推荐答案 strong>
也许你可以推迟从场景中移除鱼雷,直到下一个场景“更新”。您可以将鱼雷标记为禁用/未激活,这样它就不会影响您的第二个重叠敌人。像这样的:
class YourScene: SkScene {
// Array of disabled torpedos
var disabledTorpedos = SKSpriteNode()[]
func didBeginContact(contact: SKPhysicsContact) {
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
// Created a new photonTorpedoDisabledCategory so the torpedo cannot hit a 2nd alien
currTorpedo.physicsBody.categoryBitMask = photonTorpedoDisabledCategory
disabledTorpedoes.append(currTorpedo)
// Hide torpedo from scene
currTorpedo.hidden = true
currAlien.removeFromParent()
}
override func update(currentTime: NSTimeInterval) {
// loop through disabledTorpedos array and removeFromParent
}
}
关于ios - Sprite Kit 碰撞错误 - Swift,我们在Stack Overflow上找到一个类似的问题:
https://stackoverflow.com/questions/24401101/
|