我正在使用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();
}
}
答案 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);
}