我正在從事使用libGDX框架的Android遊戲,同時學習了他們的wiki和Learning Libgdx Game Development書。本書的作者定義了一個Assets類來使用AssetManager加載遊戲資產。每次遊戲重新開始時,需要重新加載資源,以便使用對Assets.intance.init(新的AssetManager())的調用來重新加載資源並創建新對象來存儲紋理引用。重新加載簡歷中的資產
當我在我的遊戲中執行此操作後,所有我擁有的都是黑盒子,我有很好的紋理,所以我想這裏的問題是我使用舊的參考。我把這裏的部分從書的代碼:
AssetManager#初始化
public void init(AssetManager assetManager) {
/* Dispose previous asset manager */
if (this.assetManager != null) {
this.assetManager.dispose();
}
this.assetManager = assetManager;
assetManager.setErrorListener(this);
assetManager.load(Constants.TEXTURE_ATLAS, TextureAtlas.class);
/* Start loading assets and wait until finished */
assetManager.finishLoading();
Array<String> assetNames = assetManager.getAssetNames();
Gdx.app.debug(TAG, "Assets loaded: " + assetNames.size);
for (String assetName : assetNames) {
Gdx.app.debug(TAG, "Asset: " + assetName);
}
TextureAtlas atlas = assetManager.get(Constants.TEXTURE_ATLAS);
/* Create game resource objects. Here I get what I need from the atlas */
player = new AssetPlayer(atlas);
enemy = new AssetEnemy(atlas);
}
當我創建我的遊戲我OBJETS使用Assets.instance.player和Assets.instance.enemy存儲參考作爲本書作者的紋理,這可能是問題所在。事情是,重新閱讀這本書後,我看不出他是如何解決這個問題的。
我很確定我能解決遊戲對象中改變引用的問題,但所有的東西都變得如此混亂。我真正的問題是,我應該如何在遊戲中管理遊戲資產?我一直在尋找很多遊戲示例,但其中大多數不使用AssetManager,而是將靜態變量用於紋理。
我應該在遊戲對象中保留紋理的引用嗎?真的有必要在簡歷上重新加載資產?當所有對象都在不知道何時恢復遊戲的worldController中時,我怎麼能在我的遊戲對象中重新加載紋理?
感謝您的回答。我也有一個世界渲染器,但所有的遊戲對象都有一個渲染方法,所以我在他們的類中保留了對它們紋理的引用(我總是需要一個來存儲當前的動畫)。我必須添加一個刷新方法來獲取我的WorldController中的新引用和另一個刷新方法,因爲此類存儲了所有對我的遊戲對象(或WorldRenderer中的引用,因爲有對WordController的引用)的引用。我不喜歡這個解決方案,但如果我想保持我的代碼清潔,這是必要的。我想在資產類中做到這一點,但這是不可能的... –