1

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

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

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 的帖子,但我似乎不明白为什么上述两个版本都能正常工作。

4

1 回答 1

6

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

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

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

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

于 2013-03-07T03:29:39.203 回答