SpriteKit中意外的重复冲突

时间:2016-08-30 20:18:00

标签: swift sprite-kit

我正在使用Swift和SpriteKit制作我的第一个游戏,虽然我现在已经有一段时间正常工作,我最近发现了一个巨大的错误。我的碰撞可以是用户和敌人(太空船对抗外星人)用户射击敌人(激光对抗外星人)。后者工作正常,但最近当船接触外星人时碰撞检测还没有工作 - 通常外星人应该在接触时从场景中移除,以便只有一个生命(总共3个中的1个)已移除。然而,这艘船现在触摸了3-6点生命。这是代码,我假设问题出在:

这是一些接触函数之一,然后在常规接触方法中调用。

func alien_ship_contact(contact:SKPhysicsContact){
    var alien:SKNode? = nil

    if contact.bodyA.categoryBitMask == PhysicsCategory.Alien && contact.bodyB.categoryBitMask == PhysicsCategory.Ship{
        alien = contact.bodyA.node

    }
    else if contact.bodyB.categoryBitMask == PhysicsCategory.Alien && contact.bodyA.categoryBitMask == PhysicsCategory.Ship{
        alien = contact.bodyB.node

    }
    else{
        return
    }

    killOffAlien((alien)!)
    aliensKilled = aliensKilled + 1
    shipLives = shipLives-1
    aShip.lives = aShip.lives - 1

    print("ship/alien contact")
}

以下是killOffAlien功能:

func killOffAlien(alien:SKNode){

    print("Kill off")
    //alien.removeFromParent()


    func stopMotion(){
        alien.physicsBody?.categoryBitMask = 0
        alien.physicsBody?.collisionBitMask = 0
        alien.physicsBody?.contactTestBitMask = 0

        alien.physicsBody?.dynamic = false
        alien.physicsBody?.velocity = CGVector(dx:0, dy:0)
        alien.removeActionForKey("facialMotion")
    }


    func removeAlien(){
        alien.removeFromParent()
    }

    let stopMoving = SKAction.runBlock(stopMotion)

    let fadeOut = SKAction.fadeOutWithDuration(1)
    let removeFromParent = SKAction.runBlock(removeAlien)

    let die = SKAction.sequence([stopMoving, fadeOut, removeFromParent])

    alien.runAction(die)
}

以下是一般联系方式:

func didBeginContact(contact:SKPhysicsContact){
    alien_laser_contact(contact)
    alien_ship_contact(contact)
    ....

任何帮助都会很棒,我认为在初次接触时,外星人会将它的位掩码从Alien引出,这样就可以防止未来的碰撞,因为每个外星人都应该只能移除从船上最多一次生命。

0 个答案:

没有答案