【发布时间】:2017-06-10 04:56:07
【问题描述】:
我第一次在为 iOS 开发平台游戏时遇到一些延迟。我对开发比较陌生,所以我假设我已经犯了可能减慢游戏速度的错误。
我只是有几个问题让我感到困惑。
我正在构建一个平台游戏,因此有时我会在场景摄像机视图之外有节点。如果不是,我应该遍历所有节点并将它们从场景中删除吗?这会有助于提高性能,还是 SpriteKit 会自动使用 skcameranode 执行此操作?
我想营造一种开放世界的感觉,所以有些关卡可能很大。我有很多 128x128 的图块,我将它们与 tilemapnodes 一起用于前景。玩家将与之交互的地面、泥土、平台等东西。我还有 5 层视差背景,它们是 512x512 瓦片,每层都有自己的瓦片图节点。我的问题是关于这些巨大的水平。我应该把这些tilemapnodes分成几个部分吗?这对你的表现有帮助吗?
最后一个问题,所以 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