如何向 SKAction 序列添加返回 void 的函数?

Posted

技术标签:

【中文标题】如何向 SKAction 序列添加返回 void 的函数?【英文标题】:How to add to an SKAction sequence a function which returns a void? 【发布时间】:2020-09-01 04:57:43 【问题描述】:

我正在向 SKSpriteNode 对象(球)添加一个粒子发射器,以便在它移动时形成轨迹。以下代码将球返回到其原始位置:

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)

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

无法将“Void”类型的值转换为预期的元素类型 '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()

但很明显,在球还回来之前,轨迹就消失了。

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

【问题讨论】:

【参考方案1】:

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

let doneTrail = SKAction.run  moveThis.removeAllChildren() 

既然doneTrailSKActionSKAction.sequence([moveAction, doneTrail]) 应该可以编译。

【讨论】:

以上是关于如何向 SKAction 序列添加返回 void 的函数?的主要内容,如果未能解决你的问题,请参考以下文章

在更新动画时运行遵循路径的 SKAction

运行SKAction后调用函数

SKAction如何结合withKey和completion

在随机时间结合 waitForDuration:withRange 和 runBlock: 在 SKAction 序列中生成节点

Swift 中 Sprite Kit SKAction 的问题

按顺序更改SKAction.wait(forDuration :)