Manuals
Manuals




This translation is community contributed and may not be up to date. We only maintain the English version of the documentation. Read this manual in English

优化内存使用

纹理压缩

使用纹理压缩不仅可以减少游戏存档中的资源大小,压缩后的纹理还可能减少所需的 GPU 内存量。

动态加载

大多数游戏至少有一些内容使用不频繁。从内存使用的角度来看,一直将这样的内容加载在内存中是没有意义的,而是在需要时加载和卸载它。这显然是在以运行时内存为代价使某些内容易于访问,和以加载时间为代价加载某些内容之间的权衡。

Defold 有几种不同的动态加载内容的方式:

优化组件计数器

Defold 会在创建集合时为组件和资源分配一次内存,以减少内存碎片。分配的内存量取决于 game.project 中各种组件计数器的配置。使用分析器获取准确的组件和资源使用情况,并将您的游戏配置为使用更接近组件和资源实际数量的最大值。这将减少您的游戏使用的内存量(请参阅有关组件最大计数优化的信息)。

优化 GUI 节点数量

通过将 GUI 文件中的最大节点数设置为仅需要的数量来优化 GUI 节点数量。GUI 组件属性中的当前节点字段将显示 GUI 组件使用的节点数量。

堆大小 (HTML5)

Defold HTML5 游戏的堆大小可以在 game.project 中的 heap_size 字段 进行配置。请确保优化您游戏的内存使用并设置最小的堆大小。

对于小型游戏,32 MB 是一个可实现的堆大小。对于较大的游戏,目标应为 64–128 MB。例如,如果您当前使用 58 MB 且进一步优化不可行,您可以设定为 64 MB 而不必过度纠结。没有严格的目标大小 — 这取决于游戏。只需尽量追求更小的大小,理想情况下以 2 的幂次方为步长。

要检查当前堆使用情况,您可以启动游戏并在最”资源密集”的关卡或部分中进行游戏,然后监控内存使用情况:

if html5 then
    local mem = tonumber(html5.run("HEAP8.length") / 1024 / 1024)
    print(mem)
end

您也可以打开浏览器的开发者工具,并在控制台中输入以下内容:

HEAP8.length / 1024 / 1024

如果内存使用量保持在 32 MB,那就太好了!如果没有,请按照以下步骤优化引擎本身以及声音和纹理等大型资源的大小