【问题标题】:Troubles with performance issues in SpriteKit platformer gameSpriteKit 平台游戏中的性能问题问题
【发布时间】:2017-06-10 04:56:07
【问题描述】:

我第一次在为 iOS 开发平台游戏时遇到一些延迟。我对开发比较陌生,所以我假设我已经犯了可能减慢游戏速度的错误。

我只是有几个问题让我感到困惑。

  1. 我正在构建一个平台游戏,因此有时我会在场景摄像机视图之外有节点。如果不是,我应该遍历所有节点并将它们从场景中删除吗?这会有助于提高性能,还是 SpriteKit 会自动使用 skcameranode 执行此操作?

  2. 我想营造一种开放世界的感觉,所以有些关卡可能很大。我有很多 128x128 的图块,我将它们与 tilemapnodes 一起用于前景。玩家将与之交互的地面、泥土、平台等东西。我还有 5 层视差背景,它们是 512x512 瓦片,每层都有自己的瓦片图节点。我的问题是关于这些巨大的水平。我应该把这些tilemapnodes分成几个部分吗?这对你的表现有帮助吗?

  3. 最后一个问题,所以 128x128 的图块实际上是 256x256。我只是缩小了tilemapnode。我为前景创建了一个巨大的 tilemapnode,并用这个地图节点制作了地面和地板以及一些山丘。当我将播放器移动到节点密集的区域时,它会延迟到 45-55 fps。当远离这个密集区域时,它会回到 60 fps;让我相信 SpriteKit 处理问题 1 的事情。无论如何,与其创建 256x256 的图像并在需要时按比例缩小,不如使用缩放选项创建不同尺寸的单独图像有助于提高性能? (如果重要的话,我对每张图像都使用 1、2、3 倍图像)

感谢您的帮助。

【问题讨论】:

  • #3 在某种程度上显然是肯定的,如果你使用更小的纹理,它将使用更少的内存,并且更少的 CPU 周期来缩小图像。我不确定这是你的问题。我没有太多使用瓷砖地图,但#2 尝试将它们拆分到一个辅助项目中是值得的。 #1 也可能是一个问题,特别是如果你有一个很大的世界。苹果甚至告诉你这样做
  • 在此处阅读 #3 和 #4:code.tutsplus.com/tutorials/…
  • 另一个有用的一点是查看你有多少次调用draw()。在你的GameViewController(或任何地方)你想做view.showsDrawCount = true然后你可以实际了解还有多少调用那些人口稠密的区域正在调用,然后如果您在该文章的 #3 中覆盖您的方法,您可以测量每个方法之间的时间,以更准确地找出问题所在。
  • 这里是苹果最佳实践和性能的另一个参考:youtu.be/ZIWVj6LMuSw?t=19m6s 编程指南中也有一些花絮(仍在寻找他们所说的 #1 的参考)
  • 我找到了一个旧版本的编程指南,请查看第 107 页的最佳实践部分。它超过了你的问题的第 1 个问题:upyun.cocimg.com/cocoachina/SpriteKit_PG.pdf

标签: ios swift sprite-kit frame-rate sktilemapnode


【解决方案1】:

如 cmets 中所述,以下是一些有关性能的一般提示:

【讨论】:

  • 该编程指南是一个宝石,感谢您的参考。关于 didbegin 联系方法的快速问题,你知道什么时候在被调用的循环中吗?感谢您的帮助,您能帮我通过电子邮件提问吗?
  • @Discoveringmypath 我现在不记得了。它在物理模拟框中的某个地方。在模拟之前
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-18
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多