SpriteKit 中的延迟功能 (Swift 3) 不工作
Delay function in SpriteKit (Swift 3) not working
在查看了其他几个类似的问题后,他们问题的所有答案都不适合我。我有一个暂停标签,当用户按下播放键时,我希望标签从 "Paused" 变为从 3 到 1 的倒计时。我已经声明了
let delay = SKAction.wait(forDuration: 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()
}
有什么想法吗?
您的所有操作都运行一次完成。
您需要做的是...(顺便说一句,“-> void”不是必需的)
SKAction 之后的 {} 括号是 completion:
的 shorthand,因此它会在操作完成后将代码指定为 运行。您的代码只是 运行 一次执行所有操作,延迟也是 运行ning,但在它们 运行.
之后没有任何触发
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()
}
}
}
}
}
当您在一个节点上调用 运行 时,操作会立即发生,因此您的所有操作几乎都是同时进行的 运行。您需要创建一系列操作,例如:
// 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...
在查看了其他几个类似的问题后,他们问题的所有答案都不适合我。我有一个暂停标签,当用户按下播放键时,我希望标签从 "Paused" 变为从 3 到 1 的倒计时。我已经声明了
let delay = SKAction.wait(forDuration: 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()
}
有什么想法吗?
您的所有操作都运行一次完成。
您需要做的是...(顺便说一句,“-> void”不是必需的)
SKAction 之后的 {} 括号是 completion:
的 shorthand,因此它会在操作完成后将代码指定为 运行。您的代码只是 运行 一次执行所有操作,延迟也是 运行ning,但在它们 运行.
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()
}
}
}
}
}
当您在一个节点上调用 运行 时,操作会立即发生,因此您的所有操作几乎都是同时进行的 运行。您需要创建一系列操作,例如:
// 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...