【发布时间】:2015-03-07 05:30:45
【问题描述】:
我一直在为这个看似简单的功能而烦恼,我正在尝试将其构建到我正在使用 SpriteKit 和 Swift 开发的游戏中。我已经搜索过,无法弄清楚为什么这不起作用。
我想做什么: 当玩家接触到敌人或障碍物时,我想加载并播放一个爆炸动画 createExplosion()(动画在 0.5 秒内完成),然后进行 gameOverAction()。问题是只显示了动画的第一帧,然后它进入了 gameOverAction()。 我试图制作一个 SKAction.sequence,但 Xcode 不喜欢我在序列内调用函数,所以我找到了 SKAction.waitForDuration。问题是,它对代码的执行没有影响。 这应该如何正确完成?
func collisionWithPlayer(playerObject: SKSpriteNode) {
runAction(SKAction.playSoundFileNamed("spaceExplosion.mp3", waitForCompletion: false))
createExplosion(playerObject)
playerObject.removeFromParent()
runAction(SKAction.waitForDuration(NSTimeInterval(0.5)))
gameOverAction()
}
这里是 gameOverAction() 的代码:
func gameOverAction() {
backgroundMusicPlayer.stop()
globalHighScore = NSUserDefaults.standardUserDefaults().objectForKey("GameHighScore") as? Int
localHighScore = self.monstersDestroyed
if globalHighScore == nil {
globalHighScore = localHighScore
}
globalHighScore = self.recordHighScore(localHighScore, highScore: globalHighScore!)
println(globalHighScore!)
let reveal = SKTransition.fadeWithDuration(1.0)
let gameOverScene = GameOverScene(size: self.size, won: false)
self.view?.presentScene(gameOverScene, transition: reveal)
}
func createExplosion(object: SKSpriteNode) -> SKSpriteNode {
var explosionArray = Array<SKTexture>()
var explosionSprite = SKSpriteNode()
explosionArray.append(SKTexture(imageNamed: "explosionSprite01.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite02.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite03.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite04.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite05.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite06.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite07.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite08.png"))
explosionArray.append(SKTexture(imageNamed: "explosionSprite09.png"))
let animateAction = SKAction.animateWithTextures(explosionArray, timePerFrame: 0.05)
explosionSprite = SKSpriteNode(texture:explosionArray[0])
explosionSprite.position = CGPoint(x: object.position.x + 10.0, y: object.position.y)
addChild(explosionSprite)
explosionSprite.runAction(SKAction.sequence([animateAction, SKAction.removeFromParent()]))
return(explosionSprite)
}
【问题讨论】:
-
你需要在waitForDuration之后将gameOverAction作为一个序列运行
-
能把gameOverAction的方法也发一下吗?
-
我添加了代码。每当我尝试在 SKAction.sequence 中包含方法调用时,我都无法让 Xcode 满意。我知道方法不是 SKAction,所以我尝试了 .runBlock,但同样没有成功。
标签: ios swift sprite-kit