【发布时间】:2014-02-17 21:09:59
【问题描述】:
是否可以改变已经发射的粒子的速度? SKEmitterNode 有一个particleSpeed 属性,但这仅适用于将来发射的粒子。
例如,假设我们正在构建一个宇宙飞船模拟器。想象一下在星空之上渲染的宇宙飞船。星空是通过粒子文件创建的,使用 SKEmitterNode 渲染。通过这个模拟的宇宙飞船永远不会改变位置。 SKEmitterNode 由在负 x 方向上以 10 的恒定速度移动的粒子组成。为了模拟宇宙飞船的加速,如果能够改变已经发射的粒子的速度,那就太好了。目前,如果粒子的速度发生变化,已经发射的粒子的速度将比速度变化后正在发射的粒子慢。
一种解决方案是定义一个粒子系统,该系统在例如 100 x 100 的范围内以 0 速度和 0 加速度发射粒子。该粒子系统将使用较低的 zPosition 值渲染以保持在背景中。为了模拟飞船运动,SKEmitterNode 的 x 位置将相对于飞船的速度发生变化。更多的 SKEmitterNode 被添加到场景之外,然后随着旧的 SKEmitterNode 滚落并被移除,滚动到视图中。
我已经测试过该解决方案并且它有效,但我很好奇是否有人有更优雅的解决方案。
【问题讨论】:
-
据我所知这是不可能的。来自文档:“粒子精灵归 Sprite Kit 私有——您的游戏无法访问生成的精灵。” - (developer.apple.com/library/ios/documentation/SpriteKit/…)
-
您绝对是对的,但我希望 SKEmitterNode(这些粒子的所有者)对这类事情有一些选择。这使得这些粒子系统在这方面看起来非常有限。
标签: ios iphone objective-c ios7 sprite-kit