在我的 SK 游戏中,我有一架可以发射火箭的直升机。直升机一次只能在屏幕上显示一个火箭,原因是我不想每次发射火箭时都必须创建一个新的 SKEmitterNode,因为这似乎会对 CPU 造成负担,不得不每次都取消归档发射器。
因此,火箭是单实例。当有人发射火箭时,它作为场景的子节点添加到场景中,发射,当它击中某物时,从它的父节点中移除。
在我的update{}
方法中,这里有一些伪代码:
if ([rocket parent]) {
rocketSmoke.position = rocket.position;
rocketSmoke.numParticlesToEmit = 0;
}else{
rocketSmoke.numParticlesToEmit = 1;
}
所以基本上,如果火箭存在,发射器会跟随火箭,如果不存在,发射器会自行关闭。不,我不能只是将发射器添加为火箭的子项,因为这样当火箭击中物体时,我称removeFromParent
火箭后面的烟雾轨迹会立即消失,这不是我想要的效果。
问题是,当发射新火箭并将numParticlesToEmit
其设置回零时,粒子发射器的行为就像它一直在发射粒子一样!我希望粒子发射器简单地重新打开,但一束烟雾也会立即出现在直升机后面。您可以通过在 SK 中播放发射器文件并将要发射的粒子的“最大值”设置为 1,然后将其设置回零来观察此效果:您的屏幕将立即填满,就好像它一直在发射粒子一样全程。显然这不是我想要的。
我也不能打电话resetSimulation
,因为这会清除所有现有的粒子,所以上次发射的任何挥之不去的烟雾都会立即消失,如果两枚火箭相继发射,这看起来很不自然。
我唯一的选择是编写自己的发射器吗?