Java libgdx:加载资产,内存使用量

时间:2018-03-01 12:31:46

标签: java libgdx

我们正在构建java war 2 pc游戏。 (2d,基于回合,地图由六边形组成)

我们的记忆存在问题。

我们的资源大约是850mb(图像750,数千个小图像)。 这是开发阶段,因此当我们删除一些未使用的数据,压缩等时它会更少。

但是,当我们加载所有这些资源时,我们将花费4GB的RAM。

我们正在使用资产管理器并加载其中的所有内容。

但是,主要的问题是地形,因为每个场景都使用几乎所有的地形(海/湖等除外)。

TextureAtlases不用于地形。

我想这是一个问题: “被迫使用具有2的幂(POT)的尺寸的纹理”。 我将尝试使用TextureAtlas修复此问题。

我们最近在游戏中添加了指挥官。并且看起来他们的肖像(80mb)在加载时消耗700mb的RAM(使用assetManeger [assetManeger.load(“path_name”,Texture.class);]

这些情况下的最佳做法是什么,加载的东西一直都在使用......

任何建议都会有所帮助。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

使用AssetManager而不是直接构造Textures对加载时占用的内存量没有影响。

如果使用PNG或JPG,纹理占用很多的内存,因为它们在内存中加载时未压缩。您可以将图像预压缩为ETC1,并且在加载时它们将保持压缩状态(并提高性能),但存在缺点,例如缺少alpha透明度。 Read here.

TextureAtlases将通过减少这些纹理中纹理的总数和浪费的空间来节省一些内存。如果合理使用,它们也可以在性能上有很大的改进。如果你按照经常在地图集的不同纹理页面之间跳跃的顺序绘制精灵,那么会有很大的改进。由于您关注总内存使用,因此您需要对它们进行组织,以便您可以继续卸载舞台未使用的内容。整个Atlas要么加载要么不加载,因此您需要将不同阶段的资产放入单独的地图集中。