SKEmitterNode将粒子速度更改为已发射的粒子



是否可以更改已发射粒子的速度?SKEmitterNode具有particleSpeed特性,但这仅适用于将来发射的粒子。

举个例子,假设我们正在建造一个宇宙飞船模拟器。想象一下,一艘宇宙飞船在一个星际区域上空渲染。星场是通过使用SKEmitterNode渲染的粒子文件创建的。通过这种模拟,宇宙飞船从未改变位置。SKEmitterNode由在负x方向上以10的恒定速度移动的粒子组成。为了模拟宇宙飞船的加速,如果能够改变已经发射的粒子的速度,那就太好了。截至目前,如果粒子的速度发生变化,则已经发射的粒子的速度将比速度变化后发射的粒子慢。

一种解决方案是定义一个粒子系统,该粒子系统以0速度和0加速度发射范围为100 x 100的粒子。该粒子系统将使用较低的zPosition值进行渲染,以保持在背景中。为了模拟宇宙飞船的运动,SKEmitterNode的x位置将相对于宇宙飞船的速度发生变化。更多的SKEmitterNodes被添加到场景之外,然后随着旧的SKEmitter Nodes滚动并被移除而滚动到视图中。

我测试过这个解决方案,它确实有效,但我很好奇是否有人有更优雅的解决方案。

您可能会创建第二个具有相同样式、速度更快的SKEmitterNode。然后运行SKActionSKAction sequence以在2之间转换。

一种可能的方法是将粒子添加到一个单独的层(空的SKNode)。

var particleLayer = SKNode()
self.addChild(particleLayer)
var flowEmitter = SKEmitterNode(fileNamed: "yourEmitter.sks")
emitter?.targetNode = particleLayer

然后,可以通过使用SKAction移动该层来更改粒子速度。

particleLayer.run(.move(by: CGVector(dx: 100, dy: 0), duration: 5.0))

最新更新