java - 如何重用 libGDX 中的 Assets ?

标签 java android memory-management libgdx

假设我有一个带有 Skin 的屏幕 A,它由 Assets 管理器加载到内存中:

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

我需要加载下一个屏幕 B,它也引用 AssetEnum.UISkin。简单的方法是

  1. 处理屏幕A
  2. 卸载屏幕A的资源
  3. 加载屏幕B的资源
  4. 初始化屏幕B

但我想在屏幕 B 的资源仍在加载时在屏幕 A 上显示一些加载轮。使用此扩展步骤看起来像

  1. 加载屏幕B的资源
  2. 初始化并设置屏幕B
  3. 处理屏幕A
  4. 卸载屏幕A的资源

问题是当我在第三步调用 dispose 时,skin.dispose() 删除了我在当前屏幕上也需要的前一个屏幕的纹理。而这种情况每次出现在“dispose screen A”在“load resources of screen B”之后。有没有人有什么建议?请帮忙

最佳答案

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

我们称这个类为 AssetLoader。

我假设您了解 java 的工作原理以及 libgdx 的工作原理。

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

Public static void load() {}

Public static void dispose() {}

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

Public static Skin skin;

在 load() 方法中加载皮肤,在 dispose() 方法中编写处理方法。

当你想要加载你的 Assets 时,调用

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/

相关文章:

Java 库大小

java - PHP 解析错误 JSON 异常并具有冗余值 - 无法获取 Datacom

java - Log4J – 运行时变量替换

android - 使用 IabHelper 时绑定(bind) InAppBillingService 失败

android - 如何在 React Navigation 中添加抽屉内部堆栈导航

c - 为指向结构数组的指针动态分配内存

java - 父 Activity 的 Android 实例

java - 越界了,为什么?

android - 为什么静态 MediaPlayer 实例不适用于 Android?

c++ - 接受指针数组的输入