假设我有一个屏幕,该屏幕A由资产管理器加载到内存中:

private Skin skin;
...
skin = (Skin)MyGame.ResourceManager.getAsset(AssetEnum.UISkin);
//UISkin("Menu/UISkin.json", Skin.class),


我需要加载下一个也引用Skin的屏幕B。简单的方法是


配置屏幕A
卸载屏幕A的资源
加载屏幕B的资源
初始化屏幕B


但是我想在屏幕A上显示一些加载轮,同时屏幕B的资源仍在加载。有了这个扩展步骤,看起来像


加载屏幕B的资源
初始化并设置屏幕B
配置屏幕A
卸载屏幕A的资源


问题是当我在第三步调用配置时,AssetEnum.UISkin会删除当前我也需要的先前屏幕的纹理。并且,这种情况在“加载画面B的资源”之后每次在“配置画面A”之后出现。有没有人有什么建议?请帮忙

最佳答案

您可以创建一个单独的静态类来加载您的资产,并保留它,直到不再需要它为止。

让我们将此类称为AssetLoader。

我假设您知道java的工作方式以及libgdx的工作方式。

在AssetLoader类中,您创建2个方法

Public static void load() {}




Public static void dispose() {}


同时声明您的皮肤为静态成员

Public static Skin skin;


在load()方法中进行皮肤的加载,而在dispose()方法中,编写处置方法。

当您想加载资产时,请致电

AssetLoader.load();


这些方法都是静态的,您无需在整个代码中初始化AssetLoader。随便叫吧。

当您要使用皮肤时(例如,您的Screen1()方法)

UISkin("Menu/UISkin.json", AsssetLoader.Skin.class);


最后,当游戏结束时,您致电

Assetoader.dispose();


您可以从字面上将任何东西放在静态的AssetLoader中。例如纹理和配乐。好处是您只需要在整个代码中调用一次load()方法,就可以在游戏的整个过程中使用它。只要记住当您不再需要它时就将其丢弃。

编辑:您可以做的另一件事是使用AssetManager
更多详细信息here

关于java - 如何重用libGDX中的 Assets ?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29328562/

10-09 01:11