Ios 精灵套件碰撞错误-Swift

Ios 精灵套件碰撞错误-Swift,ios,exception-handling,sprite-kit,collision-detection,Ios,Exception Handling,Sprite Kit,Collision Detection,我是IOS开发新手,目前在didBeginContact方法中遇到了一些与sprite工具包冲突的问题 如果其中一个碰撞的物理体被移除,我该如何打破或停止didBeginContact的运行。 如: 1颗子弹与2个重叠的敌人相撞。因为子弹击中了敌人一方并被摧毁,所以对第二个敌人运行的碰撞检查会抛出一个异常,因为子弹不再存在 我尝试过检查nil和NSNULL值,但没有成功。 我收到的错误代码是“线程1:EXC_BAD_指令(代码=EXC_I386_INVOIP,子代码=0x0)”,在尝试检查类别位

我是IOS开发新手,目前在didBeginContact方法中遇到了一些与sprite工具包冲突的问题

如果其中一个碰撞的物理体被移除,我该如何打破或停止didBeginContact的运行。 如: 1颗子弹与2个重叠的敌人相撞。因为子弹击中了敌人一方并被摧毁,所以对第二个敌人运行的碰撞检查会抛出一个异常,因为子弹不再存在

我尝试过检查nil和NSNULL值,但没有成功。 我收到的错误代码是“线程1:EXC_BAD_指令(代码=EXC_I386_INVOIP,子代码=0x0)”,在尝试检查类别位掩码时发生(因为鱼雷不再存在)

代码:


也许你可以推迟从场景中移除鱼雷,直到下一个场景“更新”。你可以将鱼雷标记为禁用/未激活,这样它就不会影响你的第二个重叠敌人。大概是这样的:

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

    }

 }
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

    }

 }