处置后重新使用AssetManager?

时间:2015-08-06 19:07:24

标签: java android libgdx

我正在使用assetManager加载各种资产。但是当我从应用程序中“退回”按钮并再次加载它时,在我的show()方法while (!Assets.manager.update())中再次在此行上重新加载资源时崩溃了。我得到了这个FATAL EXCEPTION

com.badlogic.gdx.utils.GdxRuntimeException: 
com.badlogic.gdx.utils.GdxRuntimeException: 
Cannot run tasks on an executor that has been shutdown (disposed)

我明白这意味着,我处理了assetManager,因此无法对其执行操作。但是我如何重新加载我的资产?

要解决这个问题,我可以抓住后退按钮并退出应用程序,使其重新开始。或者仅在用户真正选择退出时处置AssetManager。但我确实想知道是否可以选择以某种方式重新初始化AssetManager

public class Assets {

    public static AssetManager manager = new AssetManager();

    public static final AssetDescriptor<TextureAtlas> spriteAtlas =
            new AssetDescriptor<TextureAtlas>("sprites/sprites.pack", TextureAtlas.class);

    public static final AssetDescriptor<TextureAtlas> uiAtlas =
            new AssetDescriptor<TextureAtlas>("ui/ui.pack", TextureAtlas.class);

    public static final AssetDescriptor<Skin> uiSkin =
            new AssetDescriptor<Skin>("ui/ui.json", Skin.class,
                    new SkinLoader.SkinParameter("ui/ui.pack"));

    public static final AssetDescriptor<BitmapFont> defaultFont =
            new AssetDescriptor<BitmapFont>("ui/default.fnt", BitmapFont.class);

    public static final AssetDescriptor<BitmapFont> mediumFont =
            new AssetDescriptor<BitmapFont>("ui/medium.fnt", BitmapFont.class);

    public static void load()
    {
        manager.load(spriteAtlas);
        manager.load(uiAtlas);
        manager.load(uiSkin);
        manager.load(defaultFont);
        manager.load(mediumFont);
    }

    public static void dispose()
    {
        manager.dispose();
    }

}

1 个答案:

答案 0 :(得分:2)

每次调用load时都创建一个新的。像这样:

public static AssetManager manager;

public static void load()
{   
    manager = new AssetManager();
    manager.load(spriteAtlas);
    manager.load(uiAtlas);
    manager.load(uiSkin);
    manager.load(defaultFont);
    manager.load(mediumFont);
}