两个版本都可以使用,但我不确定使用哪个版本以及为什么要使用那个版本?如果您已经卸载了 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/