如何向 SKAction 序列添加一个 returns 无效的函数?

How to add to an SKAction sequence a function which returns a void?

我正在向 SKSpriteNode 对象(一个球)添加一个粒子发射器,以便在它移动时形成轨迹。下面的代码returns把球移到原来的位置:

let moveAction = SKAction.move(to: CGPoint(x: origNP.x, y: origNP.y), duration: 0.3)
let doneTrail: Void = moveThis.removeAllChildren()
let sequence = SKAction.sequence([moveAction, doneTrail])
moveThis.run(sequence)

我的目标是在球回到原来的位置之前我不想移除发射器。但是上面的代码不起作用,因为我收到错误:

Cannot convert value of type 'Void' to expected element type 'SKAction'

所以我现在的做法是:

let moveAction = SKAction.move(to: CGPoint(x: origNP.x, y: origNP.y), duration: 0.3)
let sequence = SKAction.sequence([moveAction])
moveThis.run(sequence)
moveThis.removeAllChildren()

但很明显,在球返回之前,痕迹就消失了。

有没有办法将 void 返回方法添加到 SKAction 序列?

当你想把一段代码变成一个SKAction,这样你就可以把它放到一个序列中(或者你想用它做的任何其他事情),你可以使用SKAction.run:

let doneTrail = SKAction.run { moveThis.removeAllChildren() }

现在 doneTrail 是一个 SKActionSKAction.sequence([moveAction, doneTrail]) 应该可以编译。