在我的SK游戏中,我有一架发射火箭的直升机。 heli一次只能在屏幕上有一个火箭,原因是每次发射火箭时我都不想创建一个新的SKEmitterNode,因为它似乎是在CPU上征税,每次都必须取消归档发射器。
因此,火箭是一个单一的实例。当有人发射火箭时,它会作为场景的一个孩子被添加到场景中,启动时,当它击中某个东西时,从它的父母身上移除。
在我的update{}
方法中,这里有一些假代码:
if ([rocket parent]) {
rocketSmoke.position = rocket.position;
rocketSmoke.numParticlesToEmit = 0;
}else{
rocketSmoke.numParticlesToEmit = 1;
}
所以基本上,如果火箭存在,发射器跟随火箭,如果火箭不存在,则发射器自动关闭。 不,我不能只将发射器添加为火箭的孩子,因为当火箭击中一个物体并且我呼叫removeFromParent
时,火箭后面的烟雾痕迹将立即消失,这不是效果我要去。
问题 是,当新火箭启动并且numParticlesToEmit
设置为零时,粒子发射器的行为就像它正在发射整个时间都是粒子!我希望粒子发射器能够简单地重新开启,但是直升机后面也会瞬间出现一束烟雾。您可以通过在SK中使用发射器文件并将粒子上的“max”设置为1,然后将其设置回零来观察此效果:您的屏幕将立即填充,就好像它已发射粒子一样全程。显然这不是我想要的。
我 也无法 调用resetSimulation
,因为这会删除所有现有的粒子,因此上次发布的任何挥之不去的烟雾都会瞬间消失,如果两枚火箭一个接一个地发射,那看起来会很不自然。
我唯一的选择就是编写自己的发射器吗?
答案 0 :(得分:0)
为每个不同的火箭创建发射器的新实例。这将解决您的问题。
如果它成为"对CPU过度征税"然后创建两个发射器并交替使用哪个发射器。
实施例。火箭1,使用发射器1
火箭2,使用发射器2.
火箭3,使用发射器1。
这将让你有时间让发射器完成你想要的效果,当火箭击中某个东西时,同时也允许你的下一个火箭的发射器按照你的需要行事。