SpriteKit 平台游戏中的性能问题
Troubles with performance issues in SpriteKit platformer game
我第一次在为 iOS 开发平台游戏时遇到一些延迟。我对开发还比较陌生,所以我假设我已经犯了会减慢游戏速度的错误。
我有几个问题很困惑。
我正在构建一个平台游戏,所以我有时会在场景相机视图之外设置节点。我是否应该遍历所有节点并将它们从场景中移除?这会有助于提高性能,还是 SpriteKit 会自动使用 skcameranode 执行此操作?
我想营造一种开放世界的感觉,所以有些关卡可能很大。我有很多 128x128 的图块,我将它们与 tilemapnodes 一起用于前景。玩家将与之互动的地面、泥土、平台等。我还有 5 层视差背景,它们是 512x512 的瓷砖,每个都有自己的 tilemapnode。我的问题是关于这些巨大的水平。我应该将这些 tilemapnodes 分成几个部分吗?这对你的表现有帮助吗?
最后一个问题,所以 128x128 的图块实际上是 256x256。我只是缩小了 tilemapnode。我为前景创建了一个巨大的 tilemapnode,并用这个地图节点制作了地面、地板和一些山丘。当我将播放器移动到节点密集的区域时,它会滞后到 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
使用合适的纹理大小
- 在一定程度上管理屏幕外节点
- 尝试拆分您的瓷砖地图
- 使用 Xcode 的内置工具查看内存使用情况、GPU 和 CPU(了解要缩减哪些)
我第一次在为 iOS 开发平台游戏时遇到一些延迟。我对开发还比较陌生,所以我假设我已经犯了会减慢游戏速度的错误。
我有几个问题很困惑。
我正在构建一个平台游戏,所以我有时会在场景相机视图之外设置节点。我是否应该遍历所有节点并将它们从场景中移除?这会有助于提高性能,还是 SpriteKit 会自动使用 skcameranode 执行此操作?
我想营造一种开放世界的感觉,所以有些关卡可能很大。我有很多 128x128 的图块,我将它们与 tilemapnodes 一起用于前景。玩家将与之互动的地面、泥土、平台等。我还有 5 层视差背景,它们是 512x512 的瓷砖,每个都有自己的 tilemapnode。我的问题是关于这些巨大的水平。我应该将这些 tilemapnodes 分成几个部分吗?这对你的表现有帮助吗?
最后一个问题,所以 128x128 的图块实际上是 256x256。我只是缩小了 tilemapnode。我为前景创建了一个巨大的 tilemapnode,并用这个地图节点制作了地面、地板和一些山丘。当我将播放器移动到节点密集的区域时,它会滞后到 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
使用合适的纹理大小
- 在一定程度上管理屏幕外节点
- 尝试拆分您的瓷砖地图
- 使用 Xcode 的内置工具查看内存使用情况、GPU 和 CPU(了解要缩减哪些)