【问题标题】:How can I improve FPS?如何提高 FPS?
【发布时间】:2015-05-06 08:06:54
【问题描述】:

所以我在项目开始时遇到了游戏延迟问题。因此,一旦您点击开始游戏,它就会开始以大约 42-48 FPS 的速度运行,随着您继续游戏,它开始稳定并最终以大约 58-59 FPS 的速度结束,这很好。所以我一直在尝试修复它,我已经尝试过预加载我的纹理图集,但它仍然无法正常工作。所以我运行了时间分析器,看来这是我的问题:

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

【问题讨论】:

  • 也许您可以将 plist 拆分为多个部分,然后在游戏开始时仅解析第一部分。然后可能会在后台异步解析其他部分。
  • 谢谢你,你知道我该怎么做吗?或者一些我可以阅读并做类似事情的资源

标签: ios swift sprite-kit frame-rate


【解决方案1】:

有几件事会导致 FPS 初始下降。游戏开始前:

  1. 预加载纹理和纹理图集。
  2. 预加载您正在使用的任何声音。
  3. 预加载任何其他资源(plist、建筑地图等...)

一般来说,您应该始终在开始游戏之前预加载所有资源。

【讨论】:

【解决方案2】:

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

在 Mega Jump 中,动态随机加载不同的模式。这意味着,您可以针对不同的模式使用不同的 plist,并且随着您的上升,您可以从随机 plist 中释放屏幕外内容并分配游戏的新部分。

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

【讨论】:

    【解决方案3】:

    所以我正在使用时间分析器来查看是什么让我的 FPS 一开始就下降,我相信据此是 我的 Update 方法中的这段代码:

    始终小心更新方法。每帧循环和处理许多节点会产生开销(并且在您发布的代码中,您枚举了两次!)。

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

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


    仔细阅读您的描述,您的问题似乎也可能与未正确预加载资产有关。确保在开始游戏之前保留对 SKTexture、字体、声音、动作的单一引用并将它们加载到内存中。

    【讨论】:

    • 嘿@EpicByte,我该如何添加计数器?如你所说运行代码。至于 SKTextures,我已经在开始游戏之前预加载了它们,但仍然没有用!
    • @Thesaurus03 您可以制作一个整数并在每次调用 update 时递增它。然后,一旦计数器大于某个值,则运行代码并重置计数器。您还可以计算每帧的增量时间并改用它。至于预加载,我感觉您正在预加载,但没有保留对纹理的单一引用。这意味着如果您在游戏中的任何地方初始化 SKTexture(...) 之类的 SKTexture,那将是不好的。在开始时初始化所有纹理,并让所有代码重用变量。
    • @Thesaurus03 此外,如果您有很多纹理,您可以将它们全部存储在字典或数组中。您用于动画的任何纹理都应位于其自己的单独数组中。
    猜你喜欢
    • 2021-09-20
    • 2021-12-31
    • 1970-01-01
    • 1970-01-01
    • 2012-08-09
    • 1970-01-01
    • 2018-07-12
    • 1970-01-01
    • 2012-12-13
    相关资源
    最近更新 更多