【发布时间】:2018-09-01 21:27:49
【问题描述】:
我目前正在完成我的 Space Shooter 的最后润色。在这个射击游戏中,你击中小行星并在击中时播放爆炸动画。在游戏后期,当它变得更快并且两个小行星同时出现在屏幕上并且如果它们同时爆炸时,第一个爆炸功能将无法完成,而在屏幕上显示第二个爆炸之前显示的最后一个图像。这最终会堆积起来,直到屏幕上出现太多节点以致游戏崩溃,尽管它看起来很糟糕。
我目前的爆炸功能代码是:
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()})
}
这一切都像一个魅力,直到发生连击。我尝试了一些可能的修复方法,但没有一个能做到。大部分都是一起关掉爆炸功能,显然不是目的。
如果有人可以帮助我,那就太酷了。也许有一种方法可以强制完成一个函数,无论它是否同时被调用两次。
【问题讨论】:
-
每次出现错误时动画是否卡在同一个地方?如果有,在哪里?
-
它卡在小行星爆炸的地方。每次都不一样。
-
哦,我的意思是,代码在哪里?
-
这个问题问得好,它基本上没有完成这部分函数:explosion.run(animateExplosion, completion : {self.explosion.removeFromParent()}) 因为新的爆炸被调用在它到达函数代码的末尾之前
-
挂起时是否总是显示动画的最后一张图片?从来没有第一张图片或中间图片?
标签: ios sprite-kit swift4 xcode9 2d-games