java - AssetManager - 使用哪一个

标签 java libgdx

两个版本都可以使用,但我不确定使用哪个版本以及为什么要使用那个版本?如果您已经卸载了 Assets ,是否需要处置 TextureAtlas?

版本 1:加载包文件(带有位置数据的 TexturePacker 文件)和 png。

gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt"));

assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt");
assetManager.load(DATA_DIR_PATH + "GameSpritesPack.png");

// Call only if assetmanager's update method returns true
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet);

卸载:

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) {
   assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt");
}

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.png")) {
   assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.png");
}

if(gameSpriteSheet != null) {
   gameSpriteSheet.dispose();
}

版本 2:仅加载包文件(带有位置数据的 TexturePacker 文件)。

assetManager.load(DATA_DIR_PATH + "GameSpritesPack.txt");

// Call only if assetmanager's update method returns true
gameSpriteSheet = assetManager.get(DATA_DIR_PATH + "GameSpritesPack.txt", TextureAtlas.class);
headerRegion = getTexture("MainMenuHeader", gameSpriteSheet);

卸载:

if (assetManager.isLoaded(DATA_DIR_PATH + "GameSpritesPack.txt")) {
   assetManager.unload(DATA_DIR_PATH + "GameSpritesPack.txt");
}

if(gameSpriteSheet != null) {
   gameSpriteSheet.dispose();
}

注意:我已经阅读了 Mario 在 AssetManager 上的帖子和其他相关博客,但我似乎不明白为什么上述两个版本都可以正常工作。

最佳答案

AssetManager 用于“在后台”加载 Assets 。您列出的第一个版本只是在当前线程中同步加载图集。它实际上根本没有使用 AssetManager。这很好并且可以工作,缺点是如果你的 map 集很大(或者你有很多你正在这样做的),你的应用程序将“挂起”一会儿:

gameSpriteSheet = new TextureAtlas(Gdx.files.internal(DATA_DIR_PATH + "GameSpritesPack.txt"));

运行。您可以删除第一个示例中的两条 assetManager 行,因为在这种情况下它们没有做任何事情(有用)。

第二个版本是 AssetManager 的“正确”用法。基本上,您要求 Assets 管理器在后台线程上运行您在第一个版本中使用的代码 (... new TextureAtlas(...))。您必须等到该后台线程完成(即 update() 返回 true)。这个想法是,您可以在前台的渲染线程上做其他事情(即,在屏幕上动画漂亮的图案以在加载游戏 Assets 时分散用户的注意力),同时定期检查加载是否完成。

关于java - AssetManager - 使用哪一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15259003/

相关文章:

java - 使用 libGDX 添加地面陷阱

java - 如何计算Java中可能具有相同计数的最重复值

java - 不进入线程方法

opengl - 包含 Alpha 的 mask 图像使内部 mask 变黑

android - 我想在 Libgdx 的屏幕上重复触摸/点击动画

java - Libgdx 锁定宽高比到一定范围

libgdx - 创建一个像素图,它是两个形状的差异

java - 将 Maven mask jar 包含到其他 mask jar 中

Java 小程序错误

java - future 事件/Java 类完成时发生操作的模式的名称