0

在我的 libgdx 游戏中,我使用了很多“重”图形。这是一个带有许多动画帧的巨大画布。此画布的分辨率大于 1000*1000。有很多这样的图形(函数 loadTextures() 大约是 200 行代码)。即使在高端设备上,加载游戏也需要花费大量时间,而最弱的设备游戏甚至无法加载并在加载图形时挂起。

如何优化所有这些东西?你如何解决这样的问题?

4

1 回答 1

1

首先确保您的纹理永远不会超过 1024x1024 的大小,并且始终使用二维的幂。如果您有多个较小(或非 POT)纹理,请将它们打包成一个较大的纹理(最大 1024x1024)。

拥有许多纹理(每个 1024x1024)会消耗大量内存,因此您可能应该重新考虑您的方法。例如,您可以在游戏中的某些点及时加载/卸载纹理(使用 AssetManager)(调用 System.gc();之后,以在一定程度上控制垃圾收集器)。

如果这是不可能的(例如,所有纹理都用于相同的动画),例如考虑缩小纹理,仅对实际更改的部分进行动画处理或使用骨骼动画(例如,查看 Spine,http ://esotericsoftware.com/ )。

适合您情况的最佳方法可能会有所不同。但总的来说,如果您需要多个纹理,请考虑以下准则:

  • 在启动时,仅加载整个游戏或主/菜单屏幕所需的纹理。
  • 切换屏幕(级别)时,卸载不再需要的纹理并加载特定于该屏幕/ 10 的纹理(同时您可以显示加载屏幕,例如)。
  • 避免使用过大的纹理(例如,加载 1024x1024 的纹理,而实际上在屏幕上以 200x200 渲染是浪费内存)
  • 避免加载部分相同的纹理(例如,当有多个面部图像时,只有眼睛不同,考虑将面部分割成头部并分离眼睛图像)。
于 2013-08-01T19:45:20.293 回答