问题描述
我正在尝试创建一个 SKAction
序列,然后单独反转每个操作,而不反转整体顺序。
我最初是通过 reverse()
对象中的 SKAction
方法进行尝试的,但这并不是我想要的。 From the documentation:
这个动作是可逆的;它创建了一个新的序列动作来颠倒动作的顺序。反向序列中的每个动作本身都是反向的。例如,如果一个动作序列是 {1,2,3},则相反的序列将是 {3R,2R,1R}。
我需要 {1R,3R} 作为新操作。例如,如果我有:
let rotate = SKAction.rotate(byAngle: -CGFloat.pi / 2,duration: 0.5)
let scale = SKAction.scale(by: 2,duration: 0.5)
let action = SKAction.sequence([rotate,scale])
我想对 action
动作应用一些函数来产生一个新动作,这相当于:
let rotate = SKAction.rotate(byAngle: CGFloat.pi / 2,duration: 0.5)
let scale = SKAction.scale(by: 0.5,scale])
有没有办法在不单独编写这个翻转动作的情况下实现这一点?为此,我认为一种可能性是将序列分解为单独的动作,反转它们,然后从这些动作中构建一个新动作,但我似乎无法找到将 rotation
分解回来的方法再次进入两个单独的旋转。
解决方法
您可以通过创建另一个序列来实现此目的,但操作相反,因此:
let actionReversed = SKAction.sequence([rotate.reversed(),scale.reversed()])
如果你想“向前”运行动作,完成后“反向”它们,你可以使用这样的东西:
yourspritenode!.run(action) { [self] in
yourspritenode!.run(actionReversed)
}