2016-04-26 81 views
0

我已经完成了一个游戏,该游戏是我的最终项目的一部分,该项目是使用Xocde和swift编程语言制作太空射击游戏。在Spritekit Xcode中添加爆炸的最佳方法

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

我把它放在你控制船的地方,你必须达到50分。一旦你达到50,就会出现一个需要40次命中的老板。

截至目前,一旦40次命中读取,它就会移动到另一个游戏场景(youwin)场景。

我想弄清楚如何在Boss Sprite顶部添加爆炸图像,因为Sprite慢慢地向上移动屏幕。

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

然后我试图用颗粒SKS已经在Xcode

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就会增加爆炸的最佳方式是什么。

我提供的代码可以修改一下,以满足我的愿望我敢打赌,但我敢肯定它会滞后于游戏,并把框架下

我有运行为背景的粒子,所以我敢肯定我会遇到滞后。

谢谢你提前

回答

0

我个人做了你已经尝试过的两种,两者都很好。你决定/测试哪种方法最好。

与纹理

这只是工作(使用SKAction.animateWithTextures())动画,它真的,如果你预装的纹理在比赛开始前不能对性能的影响。你不需要超过10个纹理来进行简单的爆炸。只需设置合理的时间延迟动画,你会没事的。

使用SKEmitterNode

的另一种解决方案,其涉及SKEmitterNode是很好的为好。例如,我这样做的一种方式是在当前场景中制作所需发射器的属性。然后,您可以运行一个SKAction,它将在某个延迟后几次添加该发射器的副本。这里重要的是添加一个发射器的副本老板精灵。所以如果它移动,所有添加的发射器也会随之移动。不要忘记将发射器节点上的zPosition设置为高于boss精灵。

请注意,一切都取决于一种情况,有时候你想要一个静态的发射器,有时你希望它为每个特定类的实例创建。但重要的是,如果可能的话(比如在你的这个例子中),在你从磁盘中解压发射器之后,你应该重新使用它(意思是说,你不必多次解析同一个发​​射器)。通过这样做,从磁盘读取减到最小,并且不会有fps下降。当然,如果你不谨慎使用发射器,总会有一些延迟的机会。根据文档,排除发射器时也是一种很好的做法,所以不要忘了这样做。