如何在libGDX中重用资产?

时间:2015-03-29 11:32:03

标签: java android memory-management libgdx

假设我有一个Skin的屏幕A,由资产经理在内存中加载:

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

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

  1. 配置屏幕A
  2. 卸载屏幕A的资源
  3. 加载屏幕B的资源
  4. 初始化屏幕B
  5. 但是我想在屏幕A上显示一些加载轮,而屏幕B的资源仍在加载。使用此扩展步骤看起来像

    1. 加载屏幕B的资源
    2. 初始化并设置屏幕B
    3. 配置屏幕A
    4. 卸载屏幕A的资源
    5. 问题是当我在第三步调用dispose时,skin.dispose()删除了我当前需要的前一个屏幕的纹理。并且每当“配置屏幕A”在“加载屏幕B的资源”之后出现这种情况。有没有人有什么建议?请帮忙

1 个答案:

答案 0 :(得分:2)

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

让我们称这个类为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