gpt4 book ai didi

libgdx - 正确处理 LibGDX AssetManager

转载 作者:行者123 更新时间:2023-12-04 18:07:36 27 4
gpt4 key购买 nike

所以我在 LibGDX 中制作游戏,我使用 AssetManager 加载我的所有 Assets 。
我只是不确定哪种是正确的使用方法。

目前我正在第一个屏幕之前加载所有游戏 Assets 。
然后我在 dispose 方法中清除管理器。但这意味着我有一堆纹理
等等,我不需要所有的屏幕。这会导致内存泄漏吗?

我想到的另一种方法是只加载每个屏幕所需的 Assets ,然后
在每个屏幕的 hide() 方法中卸载它们。

所以我想知道这两种方法中哪一种是最好的方法,或者是否有
一个更好的方法来处理这个?

谢谢

最佳答案

第一:如果你在Android上开发,hide()每次用户接听电话或切换到另一个应用程序时都会调用。这意味着您必须重新分配 show() 中的资源。 .对于资源密集型游戏,例如 RPG,这可能会导致在游戏重新分配图形等时出现烦人的黑屏。不好玩。

二:优化游戏时要小心早期。如果您遇到内存不足错误,那么您忘记处理的一些菜单图形可能不是瓶颈。

排除这些问题后,我发现实现 Assets 加载器的最简单方法是使用单独的 Assets类,看起来像这样:

public static AssetManager manager;
public static TextureAtlas myGraphics;
public static TextureAtlas myOtherGraphics;

public static void create() {
manager = new AssetManager();
load();
}

private static void load() {
manager.load("mygraphics.pack", TextureAtlas.class);
manager.load("myothergraphics.pack", TextureAtlas.class);
}

public static void done() {
myGraphics = manager.get("mygraphics.pack", TextureAtlas.class);
myOtherGraphics = manager.get("myothergraphics.pack", TextureAtlas.class);
}

public static void dispose() {
manager.dispose();
}

然后,在加载屏幕的 render()方法,您只需调用 Assets.manager.update() -- 如果返回true,调用 Assets.done() ,然后继续您的游戏。

这种方法有一些好处。首先,它允许您将所有 Assets 加载逻辑保留在一个类中。其次,如果您必须手动处置资源,您只需调用 Assets.myGraphics.dispose() .

如果您发现在启动期间要加载的图形数据过多(例如,Android 上 10 MB 的 Sprite ),您也可以尝试将图形数据分解为离散的 block 。在我的游戏中,每个 Sprite 都有一个单独的 TextureAtlas,每个 TextureAtlas 在加载时都会缓存到一个数组中。

经常使用的 Sprite ,例如主角,总是保存在内存中,而较旧的 Sprite 会随着时间的推移而被卸载。使用这种方法,我现在使用的内存不到 0.5 MB,而不是在 sprite 上使用 10 MB 的内存。

关于libgdx - 正确处理 LibGDX AssetManager,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23034021/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com