在看了这样的其他几个问题之后,他们问题的所有答案都不适合我。我有一个暂停标签,当用户按下播放时,我希望标签来自" Paused"从3到1倒计时。我已宣布
func playButtonTapped(_ sender: Any?) -> Void {
let delay = SKAction.wait(forDuration: 1)
pauseLabel.text = "3"
pauseLabel.run(delay)
pauseLabel.text = "2"
pauseLabel.run(delay)
pauseLabel.text = "1"
pauseLabel.run(delay)
pauseLabel.removeFromParent()
pauseLabel.run(delay)
addChild(scoreLabel)
addChild(levelLabel)
addChild(hero)
addEnemies()
play.removeFromSuperview()
createPauseButton()
}
作为我的延迟,这是其他人似乎正在做的事情,但它并不适合我。
{{1}}
有什么想法吗?
答案 0 :(得分:3)
您的所有操作都在同时运行。
你需要做的是......(顺便说一下,“ - > void”是不必要的)
SKAction之后的{}括号是completion:
的简写,因此它指定在操作完成后运行的代码。您的代码只是立即运行所有操作,延迟也在运行,但运行后没有任何操作。
func playButtonTapped(_ sender: Any?) {
let delay = SKAction.wait(forDuration: 1)
pauseLabel.text = "3"
pauseLabel.run(delay) {
pauseLabel.text = "2"
pauseLabel.run(delay) {
pauseLabel.text = "1"
pauseLabel.run(delay) {
pauseLabel.removeFromParent()
pauseLabel.run(delay) {
addChild(scoreLabel)
addChild(levelLabel)
addChild(hero)
addEnemies()
play.removeFromSuperview()
createPauseButton()
}
}
}
}
}
答案 1 :(得分:0)
当您在节点上调用run时,会立即执行操作,因此您的所有操作几乎都会立即运行。您需要创建一系列操作,例如:
// elementary actions
let remove = SKAction.removeFromParent()
let delay = SKAction.wait(forDuration: 1)
let text3 = SKAction.run({ pauseLabel="3" })
let text2 = SKAction.run({ pauseLabel="3" })
let text1 = SKAction.run({ pauseLabel="3" })
let end = SKAction.run({
addChild(scoreLabel)
addChild(levelLabel)
addChild(hero)
addEnemies()
play.removeFromSuperview()
createPauseButton()
})
// sequenced action
let seq = SKAction.sequence([ text3, delay, text2, delay, text1, delay, remove,end]}
pauseLabel.run(seq) // now launch the sequence...