在发射器之后保持粒子被破坏

时间:2014-10-14 00:43:44

标签: sprite-kit skemitternode

在我的SK游戏中,我发射火箭,每个火箭都会产生SKEmitterNode,从而产生烟雾效果。一旦火箭击中我呼叫removeFromParent的东西,这也会移除发射器,立即移除烟雾痕迹。我希望烟雾痕迹一直存在,直到颗粒消散。

即使targetNode设置为self.scene,我也不明白为什么这不会发生。我已经采用了发射器节点,创建了一个包含所有这些children的数组,并将count称为NSLogremoveFromParent它有多少个孩子,然后回来了......零。似乎所有的粒子都应该是场景本身的孩子,所以当从场景中移除发射器时,它的粒子不应该是,因为它们不是“它”。孩子们。

我尝试了许多不同的方法,但没有一种方法可行。

我想要的只是是每个火箭都有一个发射器,它会留下烟雾痕迹,当火箭被摧毁时,烟雾痕迹会随着它的消散而消失。但是我不能在火箭上调用{{1}}而不会破坏它的发射器!

1 个答案:

答案 0 :(得分:0)

我终于想出了如何做到这一点,但它花了一些小事,还有一些我还没有完成的事情。但是,它有效。

我必须创建几个发射器。我的直升机可以在重新加载之前拍摄X个火箭(这需要一段时间),所以我只是创造了许多发射器作为iVars。因此,每个火箭都有自己的发射器。

仍然,我无法将发射器添加为火箭的子弹,否则它会在火箭弹时被摧毁。所以,在我的update方法中,我创建了一个switch语句。我创建了一个新的iVar int来保存使用哪个发射器的指示器。在每个开关case中,我会告诉Sprite Kit将该发射器放在火箭后面。

因此,无论何时火箭飞行,开关声明都会检查哪个发射器应该是"附着"到火箭并每帧更新其位置。最终结果是发射器保持与火箭相连,但不是一个孩子。

然后,在我的didBeginContact方法中,我在接触时摧毁火箭并告诉它的发射器停止发射粒子(setNumParticlesToEmit:1)。

当heli经历重装时,我会从父母那里删除所有发射器,以便以后重新分配。

最后,我不得不在每次火箭射击时resetSimulation,以便不会立即出现大烟雾痕迹。

这就是我如何让它发挥作用。