SpriteKit SKSequence 使 UI Buttons 出现

Posted

技术标签:

【中文标题】SpriteKit SKSequence 使 UI Buttons 出现【英文标题】:SpriteKit SKSequence to make UI Buttons appear 【发布时间】:2016-01-30 17:57:28 【问题描述】:

在我的 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】:

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

在实例化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)

【讨论】:

以上是关于SpriteKit SKSequence 使 UI Buttons 出现的主要内容,如果未能解决你的问题,请参考以下文章

是否可以在使用 SpriteKit 的应用程序上使用 Xcode UI 测试?

是否可以使用SpriteKit在应用程序上使用Xcode UI Testing?

SpriteKit - 如何使用“挡板”使奖品轮减速?

Gamecenter init/authentication 使 SpriteKit 的精灵运动滞后

无法使应用程序进入主菜单(Swift 4 SpriteKit)

使 spritekit 中的 SKLabelNode 出现在所有其他精灵之上