0

在我的 SK 游戏中,我有一架可以发射火箭的直升机。直升机一次只能在屏幕上显示一个火箭,原因是我不想每次发射火箭时都必须创建一个新的 SKEmitterNode,因为这似乎会对 CPU 造成负担,不得不每次都取消归档发射器。

因此,火箭是单实例。当有人发射火箭时,它作为场景的子节点添加到场景中,发射,当它击中某物时,从它的父节点中移除。

在我的update{}方法中,这里有一些伪代码:

if ([rocket parent]) {
     rocketSmoke.position = rocket.position;
     rocketSmoke.numParticlesToEmit = 0;
}else{
     rocketSmoke.numParticlesToEmit = 1;
}

所以基本上,如果火箭存在,发射器会跟随火箭,如果不存在,发射器会自行关闭。不,我不能只是将发射器添加为火箭的子项,因为这样当火箭击中物体时,我称removeFromParent火箭后面的烟雾轨迹会立即消失,这不是我想要的效果。

问题是,当发射新火箭并将numParticlesToEmit其设置回零时,粒子发射器的行为就像它一直在发射粒子一样!我希望粒子发射器简单地重新打开,但一束烟雾也会立即出现在直升机后面。您可以通过在 SK 中播放发射器文件并将要发射的粒子的“最大值”设置为 1,然后将其设置回零来观察此效果:您的屏幕将立即填满,就好像它一直在发射粒子一样全程。显然这不是我想要的。

也不能打电话resetSimulation,因为这会清除所有现有的粒子,所以上次发射的任何挥之不去的烟雾都会立即消失,如果两枚火箭相继发射,这看起来很不自然。

我唯一的选择是编写自己的发射器吗?

4

1 回答 1

0

为每个不同的火箭创建发射器的新实例。这将解决您的问题。

如果它变成“对 CPU 负担过重”,则创建两个发射器并交替使用哪一个。

前任。发射火箭 1,使用发射器 1。发射
火箭 2,使用发射器 2。发射
火箭 3,使用发射器 1。

这将使您有时间让发射器在火箭击中某物时完成您想要的效果,同时还允许您的下一个火箭发射器按预期运行。

于 2014-10-13T16:52:22.973 回答