为什么一次碰撞发生时SpriteKit会检测到两次碰撞

时间:2018-07-08 04:01:11

标签: ios swift sprite-kit

首先,我定义了一个名为AlienNode的类,该类继承自SKSpriteNode,这是该类

var hP = 0

init() {
    self.hp = 5
    var alienTexture = SKTexture(imageNamed: "Alien_Normal.png")
    super.init(texture: alienTexture, color: UIColor.white, size: alienTexture.size())
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

GameScene中,我在功能didBegin()

中向外星人发射了一颗子弹,并检测到它的碰撞。
    let nodesName = [contact.bodyA.node?.name,contact.bodyB.node?.name]
    print(nodesName)

    if nodesName.contains(kAlienName) && nodesName.contains(kBulletName) {
        //A bullet hit a alien
        run(SKAction.playSoundFileNamed("Scream.wav", waitForCompletion: false))

        var alienNode: AlienNode
        if let _ = contact.bodyA.node as? AlienNode {
            contact.bodyB.node?.removeFromParent() //Remove the bullet
            alienNode = contact.bodyA.node as! AlienNode
        }
        else {
            contact.bodyA.node?.removeFromParent() //Remove the bullet
            alienNode = contact.bodyB.node as! AlienNode
        }

        alienNode.hP -= 1
        print("hit")
        if alienNode.hP <= 0 {
            alienNode.removeFromParent()
            print("Alien killed")
        }

结果是,有时会检测到一个碰撞,有时会检测到两次,这让我感到困惑,我该如何解决?

0 个答案:

没有答案