用于制作UI按钮的SpriteKit SKSequence

时间:2016-01-30 17:57:29

标签: swift sprite-kit skspritenode skaction

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

我正试图让它们“流行”,一个接一个地......我认为一个简洁的方法是将它们从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?我想它会在开始序列中的下一个动作之前等待吗?

如何在第一个按钮后显示下一个按钮?

1 个答案:

答案 0 :(得分:1)

我认为问题在于你让每个按钮自己运行"淡入"行动,这意味着他们将并行执行他们的行动。如果您希望它们在场景中一次出现一个,则让场景运行该动作会更好。这是我的解决方案......

当您实例化restartButtonshareButtonexitButton时,请设置其名称属性,如下所示:

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

您将使用这些name属性来指定要在其中运行"淡入"的按钮。使用runAction(_:onChildWithName:)方法的操作。 如果有时间淡入按钮,请使用以下操作:

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)