0

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

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

我尝试了很多很多不同的方法来做到这一点,但都没有奏效。

我想要的只是每个火箭都有一个发射器,它会留下一条烟道,当火箭被摧毁时,烟道在消散时仍然存在。但是我不能removeFromParent在不摧毁它的发射器的情况下召唤火箭!

4

1 回答 1

0

我终于想出了如何做到这一点,但这需要一些摆弄,而且有些东西我还是不太明白。但是,它有效。

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

尽管如此,我还是不能将发射器添加为火箭的子代,否则它会在火箭出现时被摧毁。所以,在我的更新方法中,我创建了一个 switch 语句。我创建了一个新的 iVarint来保存正在使用哪个发射器的指示器。在每个开关case中,我都会告诉 Sprite Kit 将那个发射器放在火箭的正后方。

因此,只要火箭在飞行中,switch 语句就会检查哪个发射器应该“连接”到火箭上,并在每一帧更新其位置。最终结果是发射器与火箭保持连接,但不是儿童。

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

当直升机重新加载时,我会从它们的父级移除所有发射器,以便稍后重新分配它们。

最后,我必须resetSimulation在每次火箭发射时都这样做,以免立即出现大烟道。

我就是这样让它工作的。

于 2014-10-14T19:23:27.157 回答