是否可以改变已经发射的粒子的速度? SKEmitterNode具有particleSpeed属性,但这仅适用于将来发出的粒子。
举个例子,假设我们正在建造一个宇宙飞船模拟器。想象一下在星空上方渲染的宇宙飞船。星域是通过粒子文件创建的,使用SKEmitterNode渲染。通过这种模拟的宇宙飞船永远不会改变位置。 SKEmitterNode由在负x方向上以10的恒定速度移动的粒子组成。为了模拟飞船加速,能够改变已经发射的粒子的速度将是很好的。截至目前,如果粒子的速度发生变化,已经发射的粒子将以比速度变化后发射的粒子更慢的速度运行。
一种解决方案是定义一个粒子系统,该粒子系统发射的粒子范围为例如100×100,速度为0,加速度为0。该粒子系统将以低zPosition值渲染以保持在背景中。为了模拟太空船运动,SKEmitterNode的x位置将相对于太空船的速度发生变化。更多的SKEmitterNodes将添加到场景之外,然后在旧的SKEmitterNodes滚动并移除时滚动到视图中。
我已经测试了这个解决方案并且它有效,但我很好奇是否有人有更优雅的解决方案。
答案 0 :(得分:0)
你可能会创建第二个SKEmitterNode
,它具有相同的样式,速度更快。然后运行SKAction
或SKAction sequence
以在2之间转换。
答案 1 :(得分:0)
一种可能的解决方法是将粒子添加到单独的层(空 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))