2013-03-06 74 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