Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 如何提高FPS?_Ios_Swift_Sprite Kit_Frame Rate - Fatal编程技术网

Ios 如何提高FPS?

Ios 如何提高FPS?,ios,swift,sprite-kit,frame-rate,Ios,Swift,Sprite Kit,Frame Rate,因此,在我的项目开始时,我遇到了游戏延迟的问题。因此,只要你点击开始游戏,它就开始以42-48 FPS的速度运行,当你继续游戏时,它开始稳定下来,并以58-59 FPS的速度结束,这很好。所以我一直在尝试修复它,我已经尝试预加载我的纹理地图集,但它仍然不起作用。所以我运行了时间分析器,这似乎是我的问题: 这似乎是我的更新方法。我认为问题在于,它必须与我的Plist文件有关。我正在从一个很长的文件加载我的所有对象。我试着在一个短得多的文件上运行这个项目,它以每秒60帧的速度完美运行。我有什么办法

因此,在我的项目开始时,我遇到了游戏延迟的问题。因此,只要你点击开始游戏,它就开始以42-48 FPS的速度运行,当你继续游戏时,它开始稳定下来,并以58-59 FPS的速度结束,这很好。所以我一直在尝试修复它,我已经尝试预加载我的纹理地图集,但它仍然不起作用。所以我运行了时间分析器,这似乎是我的问题:


这似乎是我的更新方法。我认为问题在于,它必须与我的Plist文件有关。我正在从一个很长的文件加载我的所有对象。我试着在一个短得多的文件上运行这个项目,它以每秒60帧的速度完美运行。我有什么办法可以解决这个问题吗

您可能应该为游戏中的每个模式使用不同的部分

在Mega-Jump中,不同的模式是随机动态加载的。这意味着,你可以为不同的模式使用不同的plist,当你升级时,你可以从一个随机plist中释放屏幕外的内容并分配游戏的新部分


始终动态加载内容(可能是异步加载),这样您就不会浪费内存加载屏幕外的内容,这些内容在以后才会使用。

有两种情况会导致FPS的初始下降。游戏开始前:

  • 预加载纹理和纹理地图集
  • 预加载您正在使用的任何声音
  • 预加载任何其他资源(plist、建筑地图等)
  • 一般来说,在允许游戏开始之前,您应该预先加载所有资源

    所以我用时间分析器来看看是什么让我 FPS将在开始时下降,我相信根据它 我的更新方法中的这段代码:

    请务必小心使用更新方法。每帧循环处理多个节点可能会产生开销(在您发布的代码中,您要枚举两次!)

    尝试添加一个计数器并运行您发布频率较低的代码,看看这对FPS有何影响。例如,您可以选择每0.1秒而不是每1/60秒运行一次代码

    通常,如果不需要,您应该尽量避免以帧速率运行代码。例如,您的游戏可以以每秒60帧的速度运行,但只要游戏性不受影响,您可以有一些每0.1帧运行一次的游戏逻辑。这些都是设计游戏时需要寻找的重要优化



    进一步阅读您的描述,您的问题可能还与未正确预加载资产有关。在开始游戏之前,请确保只保留一个对你的纹理、字体、声音、动作的引用,并将它们加载到内存中。

    也许你可以将plist拆分为多个部分,然后在游戏开始时只解析第一个部分。其他部分可以在后台异步解析。谢谢你知道我该怎么做吗?或者一些我可以阅读的资源,然后做类似的事情谢谢@sangony你知道我如何预加载纹理吗?或者什么时候可以找到相关信息?@Thesaurus03-Hey@EpicByte以及如何添加计数器?如您所说运行代码。至于SKTextures,我已经在游戏开始前预装了它们,但还是没用@同义词库03您可以创建一个整数,并在每次调用update时将其递增。然后,一旦计数器大于某个值,运行代码并重置计数器。您还可以计算每个帧的增量时间,并使用它来代替。至于预加载,我有一种感觉,你是预加载,但没有保持单一的参考你的纹理。这意味着,如果你在游戏中的任何地方初始化像SKTexture(…)这样的SKTexture,那就太糟糕了。在开始时初始化所有纹理,并让所有代码重用变量。@同义词库03此外,如果有很多纹理,可以将它们全部存储在字典或数组中。用于动画的任何纹理都应该在其单独的数组中。