我在开发 iOS 平台游戏时第一次遇到了一些延迟。我对开发还比较陌生,所以我假设我已经犯了一些可能会减慢游戏速度的错误。
我只是有几个问题我很困惑。
我正在构建一个平台游戏,因此有时会在场景摄像机 View 之外有节点。如果不是的话,我应该循环遍历所有节点并将它们从场景中删除吗?这是否有助于提高性能,或者 SpriteKit 是否会自动使用 skcameranode 执行此操作?
我想要打造一种类似开放世界的感觉,因此某些关卡可能会很大。我有很多 128x128 的图 block ,我将它们与tilemapnodes一起用作前景。玩家将与之互动的地面、泥土、平台等。我还有 5 层视差背景,大小为 512x512 图 block ,每个层都有自己的图 block map 节点。我的问题是关于这些巨大的水平。我应该将这些图 block map 节点分成几个部分吗?这对你的表现有帮助吗?
最后一个问题,所以 128x128 的图 block 实际上是 256x256。我只是缩小了tilemapnode。我为前景创建了一个巨大的tilemapnode,并用这个 map 节点制作了地面和地板以及一些山丘。当我将玩家移动到节点密集的区域时,它会下降到 45-55 fps。当远离这个密集区域时,它会回到 60 fps;让我相信 SpriteKit 可以处理问题 1。无论如何,与其创建 256x256 的图像并在需要时缩小,不如创建不同尺寸的单独图像而不是使用缩放选项来提高性能? (如果重要的话,我对每个图像都使用 1,2,3x 图像)
感谢您的帮助。
最佳答案
以下是一些关于性能的一般提示,如评论中所述:
Apple 讨论性能: https://youtu.be/ZIWVj6LMuSw?t=19m6s
编程指南部分:最佳实践,第 107 页: http://upyun.cocimg.com/cocoachina/SpriteKit_PG.pdf
.#3 和 #4:(重载您的方法以查看哪一个耗时最长): https://code.tutsplus.com/tutorials/spritekit-from-scratch-advanced-techniques-and-optimizations--cms-26470
找出你的draw()调用:
SKView().showsDrawCount = true
使用适当的纹理尺寸
- 在一定程度上管理屏幕外节点
- 尝试拆分您的图 block map
- 使用 Xcode 的内置工具查看内存使用情况、GPU 和 CPU(以了解要缩减哪些)
关于ios - SpriteKit 平台游戏中的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44469694/