LibGdx-从资产管理器加载json文件时出错 [英] LibGdx - Error loading json file from asset manager

查看:196
本文介绍了LibGdx-从资产管理器加载json文件时出错的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用assetmanager加载外观,并且由于There is no Bitmapfont registered with name: font_dpb_59一直出现错误.我正在尝试在json文件中使用此字体来创建Label样式. 我在外观参数中添加了字体和地图集,我在这里遗漏了什么吗?

I am loading a skin using the assetmanager and keep getting an error because There is no Bitmapfont registered with name: font_dpb_59. I am trying to use this font in my json-file to create a Label-style. I am adding fonts and atlas in the skins parameters, am I missing something here?

我这样加载我的皮肤:

        ObjectMap<String, Object> font_map = new ObjectMap<String, Object>();
        font_map.put("font_dpb_59", font_dpb_59);
        font_map.put("font_dpm_40", font_dpm_40);
        //... some more fonts

        manager.load(skinAtlas, TextureAtlas.class);
        manager.load(menuSkin, Skin.class, new SkinLoader.SkinParameter(skinAtlas, font_map));

如您所见,我将字体添加为参数,但出现错误.不知道我在做什么错,字体是在皮肤之前加载的.

As you can see I add the fonts as parameters, but get an error. No idea what I'm doing wrong, the fonts are loaded before the skin.

完整堆栈跟踪:

    Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: menu_ui/ui_skin.json
    at com.badlogic.gdx.assets.AssetManager.handleTaskError(AssetManager.java:570)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:375)
    at com.scene2d.space_camp.MyGdxGame.create(MyGdxGame.java:127)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: menu_ui/ui_skin.json
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:97)
    at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:75)
    at com.badlogic.gdx.assets.loaders.SkinLoader.loadSync(SkinLoader.java:38)
    at com.badlogic.gdx.assets.AssetLoadingTask.handleAsyncLoader(AssetLoadingTask.java:141)
    at com.badlogic.gdx.assets.AssetLoadingTask.update(AssetLoadingTask.java:90)
    at com.badlogic.gdx.assets.AssetManager.updateTask(AssetManager.java:498)
    at com.badlogic.gdx.assets.AssetManager.update(AssetManager.java:373)
    ... 3 more
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: menu_ui/ui_skin.json
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:694)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:95)
    ... 9 more
Caused by: com.badlogic.gdx.utils.SerializationException: Serialization trace:
{}."com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle".font_dpb_59.font
font (com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle)
    at com.badlogic.gdx.utils.Json.readFields(Json.java:804)
    at com.badlogic.gdx.utils.Json.readValue(Json.java:919)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:408)
    at com.badlogic.gdx.utils.Json.readValue(Json.java:852)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.readNamedObjects(Skin.java:429)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:418)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$2.read(Skin.java:414)
    at com.badlogic.gdx.utils.Json.readValue(Json.java:884)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:408)
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:692)
    ... 10 more
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: No com.badlogic.gdx.graphics.g2d.BitmapFont registered with name: font_dpb_59
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.get(Skin.java:149)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin$1.readValue(Skin.java:407)
    at com.badlogic.gdx.utils.Json.readFields(Json.java:797)
    ... 19 more

如果这有帮助,这是我的json文件:

If this helps here is my json-file:

{
  "com.badlogic.gdx.graphics.Color": {
    "white": {
      "r": 1, "g": 1, "b": 1, "a": 1
    }
  },

  "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle": {
    "font_dpb_59": {
      "font": "font_dpb_59", "fontColor": "white"
    }
  },

  "com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle": {
    "txt_btn_white": {
      "up": "button1",
      "down": "button1",
      "font": "font_dpb_59",
      "fontColor": "white",
      "pressedOffsetX": 1,
      "pressedOffsetY": -1 }
  },

  "com.badlogic.gdx.scenes.scene2d.ui.Button$ButtonStyle": {
    "btn_white": {
      "up": "button1" ,
      "down": "button1",
      "pressedOffsetX": 1,
      "pressedOffsetY": -1 }
  },
  "com.badlogic.gdx.scenes.scene2d.ui.ScrollPane$ScrollPaneStyle": {
    "default": { }
  },

  "com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle": {
    "default": { "titleFont": "font_dpb_59", "titleFontColor": "white" }
  }
}

这是我加载字体的方式:

This is how I load the fonts:

FileHandleResolver resolver = new InternalFileHandleResolver();
        manager.setLoader(FreeTypeFontGenerator.class, new FreeTypeFontGeneratorLoader(resolver));
        manager.setLoader(BitmapFont.class, ".ttf", new FreetypeFontLoader(resolver));

        FreetypeFontLoader.FreeTypeFontLoaderParameter params59 = new FreetypeFontLoader.FreeTypeFontLoaderParameter();
        params59.fontFileName = font_dpb_59;
        params59.fontParameters.size = 59;
        manager.load(font_dpb_59, BitmapFont.class, params59);

推荐答案

您在此处传递给ObjectMap的对象:

The objects you pass into your ObjectMap here:

ObjectMap<String, Object> font_map = new ObjectMap<String, Object>();
font_map.put("font_dpb_59", font_dpb_59);
font_map.put("font_dpm_40", font_dpm_40);

必须是BitmapFont对象,而不是字符串路径.为了拥有一个BitmapFont实例,您必须已经完成了一个实例的加载.如果要使用AssetManager加载它们,则必须在资产管理器上调用finishLoading,然后调用get(".....", BitmapFont.class)以获得要放入对象映射的BitmapFont引用.

must be BitmapFont objects, not String paths. In order to have a BitmapFont instance, you must have already finished loading one. If you are using AssetManager to load them, you must call finishLoading on the asset manager, then get(".....", BitmapFont.class) to get the BitmapFont reference to put in your object map.

我假设您这样做是因为您在运行时使用FreeTypeFontGenerator创建BitmapFonts,因此无法从Json加载它们.但是,如果您已经提前拥有字体文件,则没有理由不能将它们直接放入皮肤的Json文件中:

I had assumed you were doing this because you were creating BitmapFonts at runtime with FreeTypeFontGenerator, so there was no way to load them from Json. But if you already have the font files ahead of time, there's no reason you can't put them in your skin's Json file directly:

com.badlogic.gdx.graphics.g2d.BitmapFont: {
    font_dpb_59: { file: path/to/font_dpb_59.fnt,
                   scaledSize: 12, //integer height of capital letters
                   markupEnabled: false,
                   flip : false},
}

这篇关于LibGdx-从资产管理器加载json文件时出错的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆