如何重用 libGDX 中的资产?
How to reuse assets in libGDX?
假设我有一个屏幕 A,其中 Skin
由资产管理器加载到内存中:
private Skin skin;
...
skin = (Skin)MyGame.ResourceManager.getAsset(AssetEnum.UISkin);
//UISkin("Menu/UISkin.json", Skin.class),
我需要加载下一个也引用 AssetEnum.UISkin
的屏幕 B。简单的方法是
- 配置屏幕A
- 卸载屏幕A的资源
- 加载屏幕B的资源
- 初始化屏幕 B
但是我想在屏幕B的资源还在加载的时候在屏幕A上显示一些加载轮。使用此扩展步骤看起来像
- 加载屏幕B的资源
- 初始化并设置屏幕 B
- 配置屏幕A
- 卸载屏幕A的资源
问题是当我在第三步调用 dispose 时,skin.dispose()
删除了我在当前屏幕上也需要的前一个屏幕的纹理。而且每次"dispose screen A"在"load resources of screen B"之后都会出现这种情况。有没有人有什么建议?请帮助
您可以创建一个单独的静态 class 来加载您的资产并保留它直到您不再需要它。
让我们称之为 class AssetLoader。
我假设您知道 java 的工作原理以及 libgdx 的工作原理。
在 class、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
假设我有一个屏幕 A,其中 Skin
由资产管理器加载到内存中:
private Skin skin;
...
skin = (Skin)MyGame.ResourceManager.getAsset(AssetEnum.UISkin);
//UISkin("Menu/UISkin.json", Skin.class),
我需要加载下一个也引用 AssetEnum.UISkin
的屏幕 B。简单的方法是
- 配置屏幕A
- 卸载屏幕A的资源
- 加载屏幕B的资源
- 初始化屏幕 B
但是我想在屏幕B的资源还在加载的时候在屏幕A上显示一些加载轮。使用此扩展步骤看起来像
- 加载屏幕B的资源
- 初始化并设置屏幕 B
- 配置屏幕A
- 卸载屏幕A的资源
问题是当我在第三步调用 dispose 时,skin.dispose()
删除了我在当前屏幕上也需要的前一个屏幕的纹理。而且每次"dispose screen A"在"load resources of screen B"之后都会出现这种情况。有没有人有什么建议?请帮助
您可以创建一个单独的静态 class 来加载您的资产并保留它直到您不再需要它。
让我们称之为 class AssetLoader。
我假设您知道 java 的工作原理以及 libgdx 的工作原理。
在 class、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