【发布时间】:2014-05-01 13:06:34
【问题描述】:
我正在使用 libGDX 框架开发一款 Android 游戏,同时从他们的 wiki 和 Learning Libgdx Game Development 书籍中学习。本书作者定义了一个 Assets 类来使用 AssetManager 加载游戏资源。每次游戏恢复时,资产都需要重新加载,因此他使用对 Assets.intance.init(new AssetManager()) 的调用来重新加载资产并创建新对象来存储纹理引用。
当我在我的游戏中执行此操作时,在恢复之后,我所拥有的只是黑框,其中我有很好的纹理,所以我认为这里的问题是我使用的是旧的参考。我把书中的部分代码放在这里:
AssetManager#init
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);
}
当我创建我的游戏对象时,我使用 Assets.instance.player 和 Assets.instance.enemy 来存储对纹理的引用,就像本书的作者所做的那样,这可能是问题所在。问题是重读这本书后,我不明白他是如何解决这个问题的。
我很确定我可以解决在我的游戏对象中更改引用的问题,但是一切都变得如此混乱。我真正的问题是,我应该如何管理我的游戏中的游戏资产?我一直在寻找很多游戏示例,但其中大多数不使用 AssetManager,而是使用纹理的静态变量。
我应该在游戏对象中保留纹理的引用吗?真的有必要在简历上重新加载资产吗?当所有对象都在不知道游戏何时恢复的 worldController 中时,如何在我的游戏对象中重新加载纹理?
【问题讨论】:
标签: android libgdx rendering assets