在Spritekit Xcode中添加爆炸的最佳方法

时间:2016-04-26 00:14:15

标签: ios swift sprite-kit

我已经完成了一个游戏,这是我最终项目的一部分,该游戏是使用Xocde和快速编程语言制作太空射击游戏。

我满足了所有要求,但我想在这里添加一些小东西,只是为了它的乐趣。

我有你控制船只的地方你必须达到50分。一旦你达到50,就会出现一个需要40次击中的Boss。

截至目前,一旦40个点击读取,然后它移动到另一个gamecene(youwin)场景。

我想弄清楚如何在Sprite缓慢向上移动屏幕的同时在Boss精灵上添加爆炸图像。

我从爆炸gif中提取了图像并添加了它们,我只需每0.1秒切换一次纹理,但后来我发现这太多了。

然后我尝试在xcode中使用粒子sks

func explosion(pos: CGPoint) {
      var emitterNode = SKEmitterNode(fileNamed: "ExplosionParticle.sks")
      emitterNode.particlePosition = pos
      self.addChild(emitterNode)
      // Don't forget to remove the emitter node after the explosion
      self.runAction(SKAction.waitForDuration(2), completion: { emitterNode.removeFromParent() })

  }

然后

If score == 40
{

explosion(self.heroSprite.position)
endGameScene (you win).. etc

}

它只能工作一次......

爆炸发生但它不会跟随bossSprite向上移动屏幕。

我的问题是,一旦达到零点,就会向Sprite添加爆炸的最佳方法。

我提供的代码可能会有所改变,以满足我的赌注,但我确信它会落后于游戏并降低帧数

我有一个粒子作为背景运行所以我相信我会遇到滞后。

提前谢谢

1 个答案:

答案 0 :(得分:0)

就我个人而言,我做了你尝试过的两种方法都很好。由你来决定/测试最有效的方法。

使用纹理制作动画

这只是工作(使用/etc/shadow),如果你在游戏开始之前预加载纹理,它实际上不会影响性能。您不需要超过十个纹理就可以进行简单的爆炸。设置动画时只需设置合理的时间延迟即可。

使用SKEmitterNode

另一个涉及SKAction.animateWithTextures()的解决方案也很不错。例如,我这样做的一种方法是在当前场景上创建所需发射器的属性。然后,您可以运行SKEmitterNode,这会在一定延迟后几次添加该发射器的副本。这里重要的是将发射器的副本添加到boss精灵。因此,如果它移动,所有添加的发射器也将随之移动。不要忘记将发射器节点上的SKAction设置为高于boss精灵。

请注意,一切都取决于具体情况,有时您需要一个静态发射器,有时您希望它按某个类的实例创建。但问题是,如果可能的话(比如你的这个例子),在从磁盘上取消归档发射器之后,你应该重新使用它(意味着,你不必多次取消归档同一个发射器)。通过这样做,从磁盘读取减少到最小,并且将没有fps下降。当然,如果你不小心使用发射器,总会有一些滞后的可能性。根据文档,在发射完成后移除发射器也是一种很好的做法,所以不要忘记这样做。

相关问题