您好,我对libGDX中的AssetsManager有问题。

我加载TTFSkinAssetsManager并将TTF添加到Skin中。然后,当我处理时,AssetsManager抛出异常。

我知道问题应该出在皮肤和资产管理器确实配置了相同的像素图。但是有办法防止这种情况发生吗?

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: Pixmap already disposed!
at com.badlogic.gdx.graphics.Pixmap.dispose(Pixmap.java:315)
at com.badlogic.gdx.graphics.g2d.PixmapPacker$Page$1.dispose(PixmapPacker.java:384)

码:
    FreeTypeFontLoaderParameter ttfParam = new FreeTypeFontLoaderParameter();
    ttfParam.fontFileName = Const.TTF_ARIAL_PATH;

    if (!manager.isLoaded(Const.TTF_ARIAL_SMALL, BitmapFont.class)) {
        ttfParam.fontParameters.size = 16;

        manager.load(Const.TTF_ARIAL_SMALL, BitmapFont.class, ttfParam);
    }

    if (!manager.isLoaded(Const.TTF_ARIAL_NORMAL, BitmapFont.class)) {
        ttfParam.fontParameters.size = 32;

        manager.load(Const.TTF_ARIAL_NORMAL, BitmapFont.class, ttfParam);
    }

    if (!manager.isLoaded(Const.TTF_ARIAL_LARGE, BitmapFont.class)) {
        ttfParam.fontParameters.size = 64;

        manager.load(Const.TTF_ARIAL_LARGE, BitmapFont.class, ttfParam);
    }

    if (!manager.isLoaded(Const.EDITOR_UI_SKIN, Skin.class)) {
        SkinParameter skinParam = new SkinParameter(Const.EDITOR_UI_SKIN_PATH);
        manager.load(Const.EDITOR_UI_SKIN, Skin.class, skinParam);
    }

    manager.finishLoading();

    skin = manager.get(Const.EDITOR_UI_SKIN, Skin.class);

    BitmapFont font = manager.get(Const.TTF_ARIAL_SMALL, BitmapFont.class);
    skin.add(Const.TTF_ARIAL_SMALL, font, BitmapFont.class);

编辑:我解决了。但是我不喜欢这个解决方案。
public void dispose() {
    skin.remove(Const.TTF_ARIAL_SMALL, BitmapFont.class);
    manager.dispose();
}

最佳答案

一旦不再需要该资产,并且您想要释放它以避免内存泄漏。用 :

manager.unload( yourAsset ) ;

指出是否要释放所有资产是很有趣的
一次排队或加载,而不是一个接一个地执行:
manager.clear() ;

不过,通过使用clear()方法,AssetManager仍然可以运行:
manager.dispose

关于java - LibGDX:处置它时,AssetsManager GdxRuntimeException,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40708577/

10-11 03:50