开发者注意事项:由于此软件包为预发布版本,API可能会在没有通知的情况下发生重大更改。它未经测试,因此使用风险自负。
ActionBuilder允许您以更简洁、声明性的方式编写SpriteKit动画。它由各种结构体组成,这些结构体代表基本的动画,如Scale
和Rotate
。
使用ActionBuilder创建的动画
let emote =
Sequence {
Group {
FadeIn(duration: 0.7)
Scale(by: 1.5, duration: 0.7)
Move(to: (0, 30), duration: 0.7)
}
Wait(0.5)
FadeOut(duration: 1)
Remove()
}
与使用Apple的SpriteKit SKActions的相同动画相比
let emoteAction: SKAction = {
let fadeIn = SKAction.fadeIn(withDuration: 0.7)
let grow = SKAction.scale(by: 1.5, duration: 0.7)
let moveUp = SKAction.moveTo(y: 30, duration: 0.7)
let appear = SKAction.group([fadeIn, grow, moveUp])
let wait = SKAction.wait(forDuration: 1)
let disappear = SKAction.fadeOut(withDuration: 1)
let remove = SKAction.removeFromParent()
let emoteAnimation = SKAction.sequence([appear, wait, disappear, remove])
return emoteAnimation
}()
ActionBuilder允许您在动画声明中使用条件和循环语句,使其更灵活且更易于编写。
使用changeTarget(to:)
修饰符在多个节点之间协调动画。
包含自定义运算符:+
会将多个动作连接成一个序列,&
会将它们分组以同时运行,-
将反转可逆的动作,而*
允许您多次重复一个动作。
即使ActionBuilder中没有等效项,您也可以包含SKAction
。
let node = SKNode()
let otherNode = SKNode()
node.run {
Group {
Sequence {
for i in 0...9 {
Colorize(with: UIColor(red: Double(i/10), green: 0.7, blue: 0.7, alpha: 1))
Wait(0.2)
}
}
.changeTarget(to: otherNode)
Sequence {
let moveUp = Move(by: (0, 10))
if Bool.random() {
moveUp * 2
} else {
-moveUp
}
SKAction.resize(toHeight: 20, duration: 5)
}
}
}
请参阅Apple的文档:https://developer.apple.com/documentation/spritekit/skaction/action_initializers