我正在从事使用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的引用)的引用。我不喜欢这个解决方案,但如果我想保持我的代码清洁,这是必要的。我想在资产类中做到这一点,但这是不可能的... –