SpriteKit |双击爆炸虫

时间:2018-03-23 08:52:54

标签: ios sprite-kit swift4 xcode9 2d-games

我目前正在研究太空射击游戏的最后润色。在这个射手中你击中了小行星,当击中时,会播放爆炸动画。在游戏后期,当它变得更快并且2个小行星同时出现在屏幕上时如果它们同时爆炸,第一次爆炸功能将无法完成,而在屏幕上第二次爆炸之前显示最后一张图像。这最终会堆积起来,直到屏幕上有如此多的节点让游戏崩溃,尽管它看起来很糟糕。

我目前的爆炸功能代码是:

func spawnEpxlotion(spawnPosition: CGPoint){

    let explosion1 = SKTexture(imageNamed: "explosion-1")
    let explosion2 = SKTexture(imageNamed: "explosion-2")
    let explosion3 = SKTexture(imageNamed: "explosion-3")
    let explosion4 = SKTexture(imageNamed: "explosion-4")
    let explosion5 = SKTexture(imageNamed: "explosion-5")
    let explosion6 = SKTexture(imageNamed: "explosion-6")
    let explosion7 = SKTexture(imageNamed: "explosion-7")
    let explosion8 = SKTexture(imageNamed: "explosion-8")
    let explosion9 = SKTexture(imageNamed: "explosion-9")

    let animateExplosion = SKAction.sequence([
        SKAction.wait(forDuration: 0, withRange: 0),
        SKAction.animate(with: [explosion1,explosion2,explosion3,explosion4,explosion5,explosion6,explosion7,explosion8,explosion9], timePerFrame: 0.03)])

    explosion = SKSpriteNode(texture: explosion1)
    explosion.position = spawnPosition
    explosion.setScale(2)
    self.addChild(explosion)
    explosion.run(explosionSound)
    explosion.run(animateExplosion, completion : {self.explosion.removeFromParent()})
}

这一切都像魅力一样,直到双击发生。我尝试了一些可能的修复,但没有一个能做到。他们中的大多数人一起关闭了爆炸功能,这显然不是目标。

如果有人可以帮助我,那会很酷。也许有一种方法可以强制完成一个函数,无论它是否同时被调用两次。

1 个答案:

答案 0 :(得分:1)

您的explosion变量未在您的函数中声明,这表明它必须是实例变量。当您在上一个动画仍在运行时调用spawnEpxlotion,并且您到达explosion = SKSpriteNode(texture: explosion1)行时,您正在吹走正在运行动画的节点。使explosion成为局部变量。祝你好运。