java - 如何减少 libgdx 中 2D Sprite 的高 RAM 使用率

标签 java libgdx sprite game-development

我们的项目遇到了非常高的 RAM 使用情况。我们使用 java、libgdx 和许多 Sprite 。

我们想将我们的 sprite 升级到 81 帧 512x512 as png,并且由于我们的实体是组合的 sprite( body 、头部、头发、武器、衣服),我们想一次给一些实体一些变化我们讨论了 500 到 1000 个可能会(在极端情况下)彼此并行/快速使用的 Sprite 。我们尝试了几个(~10)个这样的 Sprite ,它使用了 6GB 以上的 RAM,所以它不可能太多了。

我们现在已将分辨率缩小到 128x128(尽管我们更喜欢 256),并将帧数缩小到 25(这意味着重复动画更多)。我们研究了一些进一步减少 ram 使用的方法,但不确定哪些方法效果好。

项目描述:静态对象的 tilemap + 额外的实体阶段。我们希望在缩小时在屏幕上一次看到多达 30 个左右的实体(x5 Sprite ),在放大时仍然有几个。

最佳答案

如果您还没有这样做,一种方法是将所有 Sprite 放在一个图像( Sprite 表)中,like this .

这减少了所需的元数据量和单独加载的图像数量,因此 RAM 使用量也会减少。然后你只需要一个 sprite sheet 加载器,许多示例可以通过简单的谷歌搜索找到。

另一种方法是不将所有 Sprite 一起加载,只加载每个级别或同等级别所需的 Sprite 。

您必须有非常多的 sprite 才能使用那么多的 RAM。我会检查您的代码以确保您不会意外地多次加载它们。最常见的做法是在游戏循环中加载代码。

此外,对于每种类型的实体,只在静态上下文中加载一次 Sprite 。

关于java - 如何减少 libgdx 中 2D Sprite 的高 RAM 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51876008/

相关文章:

java - 包含图像和文本的 ListView 内存不足异常

LIBGDX-获取 Actor 在 table 内的位置

libGDX InputListener、InputProcessor、InputAdapter有什么区别

java - 当相机平移时, Sprite 不会跟随 box2d 主体,但如果相机在 libgdx 中是静态的,则效果良好

java - 使用 JSON 和 jQuery 进行动态表绑定(bind)

java - 如何跳过表格行

java - 通过与另一个列表比较从一个列表中删除重复项

eclipse - 如何在 Eclipse 中将 “Other Linker Flags” 设置为 Xcode?

c++ - DirectX 10.1/C++ : How to render text on sprite over ID3D10Resource* textures?

javascript - 旋转 Sprite javascript