2013-03-06 44 views
1

两个版本都可以工作,但我不确定要使用哪一个版本以及为什么要使用该版本?如果您已经卸载资产,您是否需要处置TextureAtlas?AssetManager - 使用哪一个

版本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和其他博客文章,但我似乎并没有得到为什么这两个版本以上做工精细。

回答

6

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

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

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

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

+1

谢谢。所以,当我加载包文件(在这种情况下为.txt)时,它会自动加载与之关联的.png文件?最后,我在线程中有一个问题,您可能错过了,即使我将资产置于第二个版本中,是否仍然必须处理spritesheet(TextureAtlas)? – Malakai 2013-03-07 11:45:22

+2

是的,'.txt'文件在加载到'TextureAtlas'时会告诉它加载所有引用的纹理文件。您应该*不*处理资产管理器手动加载的资产。在AssetManager上使用'卸载'。请参阅https://code.google.com/p/libgdx/wiki/AssetManager – 2013-03-07 16:48:55

+0

如果您在问题中看到我的代码,那就是我所做的。但在卸载后,我放弃了TextureAtlas(gameSpritePack)。这是正确的还是我不需要?谢谢。 – Malakai 2013-03-07 17:08:27