SpriteKit SKSequence 使 UI 按钮出现

SpriteKit SKSequence to make UI Buttons appear

在我的 SpriteKit 游戏的 gameOverScene 中,我有 3 个按钮出现在屏幕上。

我正在努力使它们 "pop in" 一个接一个...我认为一种巧妙的方法是将它们从 0 alpha 淡入到完整。

我目前是这样做的:

    //animate in buttons
    restartButton.alpha = 0
    shareButton.alpha = 0
    exitButton.alpha = 0

    let bringInUIButtons = SKAction.sequence([
        SKAction.waitForDuration(1.0),
        SKAction(restartButton.runAction(SKAction.fadeInWithDuration(0.3))),
        SKAction.waitForDuration(1.0),
        SKAction(shareButton.runAction(SKAction.fadeInWithDuration(0.3))),
        SKAction.waitForDuration(1.0),
        SKAction(exitButton.runAction(SKAction.fadeInWithDuration(0.3))),
        ])

    runAction(bringInUIButtons)

但它们都同时淡入淡出...尽管,作为我序列的一部分,我在每个动作之间等待一秒钟。

我什至试过这个:

    //animate in buttons
    restartButton.alpha = 0
    shareButton.alpha = 0
    exitButton.alpha = 0

    let bringInUIButtons = SKAction.sequence([
        SKAction.waitForDuration(1.0),
        SKAction(restartButton.runAction(SKAction.fadeInWithDuration(0.3))),
        SKAction.waitForDuration(1.0),
        SKAction(shareButton.runAction(SKAction.fadeInWithDuration(0.6))),
        SKAction.waitForDuration(1.0),
        SKAction(exitButton.runAction(SKAction.fadeInWithDuration(0.9))),
        ])

    runAction(bringInUIButtons)

...并通过更改淡入淡出持续时间,使每个按钮出现的时间更长,但看起来不太好。

我使用 waitForDuration 不正确吗?我想它会在开始序列中的下一个动作之前等待?

如何让下一个按钮出现在第一个按钮之后?

我认为问题在于每个按钮 运行 都有自己的 "fade in" 操作,这意味着它们将并行执行它们的操作。如果您希望它们在场景中一次出现一个,最好让场景 运行 动作。这是我的解决方案...

实例化 restartButtonshareButtonexitButton 时,设置它们的名称属性,如下所示:

restartButton.name = "restartButton"
shareButton.name = "shareButton"
exitButton.name = "exitButton"

您将使用这些 name 属性来指定要使用 runAction(_:onChildWithName:) 方法对其进行 运行 一个 "fade in" 操作的按钮。 当需要淡入淡出按钮时,使用这组操作:

let fadeIn = SKAction.fadeInWithDuration(1)
let wait = SKAction.waitForDuration(1)

let bringInRestartButton = SKAction.runAction(fadeIn, onChildWithName: "restartButton")
let bringInShareButton = SKAction.runAction(fadeIn, onChildWithName: "shareButton")
let bringInExitButton = SKAction.runAction(fadeIn, onChildWithName: "exitButton")

let bringInUIButtons = SKAction.sequence([
  bringInRestartButton,
  wait,
  bringInShareButton,
  wait,
  bringInExitButton
])

runAction(bringInUIButtons)