【问题标题】:Optimal method to add explosions in Spritekit Xcode在 Spritekit Xcode 中添加爆炸的最佳方法
【发布时间】:2016-04-26 00:14:15
【问题描述】:

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

我满足了所有要求,但我想在这里和那里添加一些小东西只是为了好玩。

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

截至目前,一旦阅读了 40 个点击,它就会转移到另一个游戏场景 (youwin) 场景。

我试图弄清楚如何在 Boss Sprite 上随着 Sprite 在屏幕上缓慢移动时添加爆炸图像。

我从爆炸 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 的生命值达到零,将爆炸添加到 Sprite 的最佳方式是什么。

我提供的代码可以稍作更改以满足我打赌的愿望,但我敢肯定它会滞后游戏并降低帧数

我有一个粒子作为背景运行,所以我确信我会遇到延迟。

提前谢谢你

【问题讨论】:

    标签: ios swift sprite-kit


    【解决方案1】:

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

    使用纹理制作动画

    这很有效(使用SKAction.animateWithTextures()),如果您在游戏开始前预加载纹理,它确实不会影响性能。你不需要超过十个纹理来制作一个简单的爆炸。只需在制作动画时设置合理的时间延迟即可。

    使用 SKEmitterNode

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

    请注意,一切都取决于具体情况,有时您需要一个静态发射器,有时您希望为某个类的每个实例创建它。但关键是,如果可能的话(就像在你的这个例子中一样),在你从磁盘取消归档发射器之后,你应该重新使用它(意味着你不必多次取消归档同一个发射器)。通过这样做,从磁盘读取的数据减少到最低限度,并且不会出现 fps 下降。当然,如果您不谨慎使用发射器,则总会有一些滞后的机会。根据文档,在完成发射后移除发射器也是一种很好的做法,所以也不要忘记这样做。

    【讨论】:

      猜你喜欢
      • 2022-01-16
      • 1970-01-01
      • 2021-10-08
      • 1970-01-01
      • 1970-01-01
      • 2018-05-10
      • 1970-01-01
      • 2013-05-03
      • 1970-01-01
      相关资源
      最近更新 更多