swift - SpriteKit SKSequence 使 UI 按钮出现

标签 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)

但它们都会立即淡入......尽管如此,作为我的序列的一部分,我在每个 Action 之间等待一秒钟。

我什至尝试过这个:

    //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?我认为它会在开始序列中的下一个操作之前等待?

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

最佳答案

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

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

关于swift - SpriteKit SKSequence 使 UI 按钮出现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35105099/

相关文章:

ios - 异常的 UITableView 崩溃 -[__NSArrayM objectAtIndex :]: index 0 beyond bounds for empty array

ios - 如何将按钮设置到导航的最右侧 - iOS

html - 从 Swift 中的 div 元素中检索特定文本

ios - 如何阻止 Sprite 从特定表面反弹

swift - 赋值前验证值不相等

swift - SKAction 排序和分组动画

ios - 图像 mask 在 iOS 10 beta 3 上失败

swift - 如何防止 SceneKit 中的 SpriteKit 覆盖拉伸(stretch)?

swift - 当我单击 "Replay"按钮时,仅运行 GameScene.sks,而不运行 GameScene.swift...如何让两者同时玩?

ios - SKSpriteNode 替换为 SKTexture