首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >资源管理器和外观字体处理(/Skin)

资源管理器和外观字体处理(/Skin)
EN

Stack Overflow用户
提问于 2016-09-09 17:37:31
回答 1查看 318关注 0票数 1

我正在使用libgdx AssetManager加载带有自定义字体的皮肤。

当我调用assetmanager.dispose()时,它抛出一个异常:

代码语言:javascript
复制
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)
at com.badlogic.gdx.graphics.g2d.BitmapFont.dispose(BitmapFont.java:315)
at com.badlogic.gdx.scenes.scene2d.ui.Skin.dispose(Skin.java:416)
at com.badlogic.gdx.assets.AssetManager.unload(AssetManager.java:211)
at com.badlogic.gdx.assets.AssetManager.clear(AssetManager.java:653)
at com.badlogic.gdx.assets.AssetManager.dispose(AssetManager.java:621)

在尝试处理我添加的自定义字体时。我认为这是因为AssetManager先处理BitmapFont,然后再处理皮肤。但皮肤也在尝试处理BitmapFont。不可能切换加载皮肤和BitmapFont的顺序,因为皮肤在其加载过程中需要BitmapFont。

这是我加载皮肤和字体的地方:

代码语言:javascript
复制
    FileHandleResolver resolver = new InternalFileHandleResolver();
    app.assetManager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
    app.assetManager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));
    FreetypeFontLoader.FreeTypeFontLoaderParameter params = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
    params.fontFileName = "font/stay_writer.ttf";
    params.fontParameters.size = 25;
    app.assetManager.load("stay_writer_25.ttf", BitmapFont.class, params);
    app.assetManager.finishLoading();
    // Queue Skin
    app.assetManager.load("skins/uiskin.atlas", TextureAtlas.class);
    ObjectMap<String, Object> resources = new ObjectMap<String, Object>();
    resources.put("default-font", app.assetManager.get("stay_writer_25.ttf", BitmapFont.class));
    app.assetManager.load("skins/uiskin.json", Skin.class, new SkinLoader.SkinParameter("skins/uiskin.atlas", resources));

我一直在调用assetmanager.update(),并确保加载皮肤。

我使用以下命令来处理AssetManager:

代码语言:javascript
复制
assetManager.dispose();

这给了我Pixmap already disposed!错误。

我调试了BitmapFont.dispose()的调用。第一个调用的堆栈跟踪显示,该调用来自assetManager.unload(),第二个调用来自Skin.dispose(),它是从assetManager.unload()方法调用的。

现在我想知道是否有一种方法可以处理皮肤和BitmapFont,而不使它们相互冲突。

EN

回答 1

Stack Overflow用户

发布于 2016-09-09 20:46:53

因此,如果你不需要字体由AssetManager管理,你可以简单地单独加载它,这样AssetManager就不会处理它。

否则,我认为您需要在卸载或处理皮肤之前将资源从皮肤中移除:

代码语言:javascript
复制
skin.remove("stay_writer_25.ttf", BitmapFont.class);
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39408448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档