AssetManager - 使用哪一个

时间:2013-03-06 22:03:41

标签: java libgdx

两个版本都可以使用,但我不确定使用哪个以及为什么要使用该版本?如果您已经卸载资产,是否需要处理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();
}

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

1 个答案:

答案 0 :(得分:6)

AssetManager用于“在后台”加载资产。您列出的第一个版本只是在当前线程中同步加载图集。它实际上根本没有使用AssetManager。这样很好并且会起作用,不利的一面是,如果你的地图集很大(或者你有很多这样的地图),那么你的应用程序会“暂停”一会儿:

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

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

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