反转 SKAction 序列中的每个单独的动作,而不反转所有动作的顺序

问题描述

我正在尝试创建一个 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)
  }

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...