我在为iOS开发平台游戏时第一次遇到了一些滞后现象。我对开发比较陌生,所以我假设我已经犯了错误,可能会减慢我的游戏速度。
我只是有一些我很困惑的问题。
我正在构建一个平台游戏,所以我有时会在场外摄像机视图中找到节点。我是否应该循环遍历所有节点并将其从场景中删除?这会对性能有所帮助,还是SpriteKit会自动使用skcameranode执行此操作?
我想要建立一种类似开放世界的感觉,所以某些级别可能很大。我有很多128x128瓷砖,我使用tilemapnodes作为前景。玩家将与之交互的地面,泥土,平台等物品。我还有5层视差背景,这些背景是512x512个图块,每个图块都有自己的tilemapnode。我的问题是关于这些巨大的水平。我应该将这些tilemapnodes分解成几个部分吗?这会对你的表现有帮助吗?
最后一个问题,所以128x128的瓷砖真的是256x256。我只是按比例缩小了tilemapnode。我为前景创建了一个巨大的tilemapnode,并用这个地图节点创建了地面和地板以及一些山丘。当我将播放器移动到一个密集节点的区域时,它将延迟到45-55 fps。当远离这个密集区域时,它会回到60 fps;让我相信SpriteKit处理问题1。无论如何,它不是在256x256中创建图像并在需要时缩小,而是有助于性能创建不同大小的单独图像而不是使用缩放选项? (如果重要的话,我正在为每张图片使用1,2,3x图像)
感谢您的帮助。
答案 0 :(得分:2)
以下是评论中提到的一些性能提示:
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
使用适当的纹理尺寸