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" 操作,这意味着它们将并行执行它们的操作。如果您希望它们在场景中一次出现一个,最好让场景 运行 动作。这是我的解决方案...
实例化 restartButton
、shareButton
和 exitButton
时,设置它们的名称属性,如下所示:
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)
在我的 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" 操作,这意味着它们将并行执行它们的操作。如果您希望它们在场景中一次出现一个,最好让场景 运行 动作。这是我的解决方案...
实例化 restartButton
、shareButton
和 exitButton
时,设置它们的名称属性,如下所示:
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)