从 android/assets 加载 json ui-皮肤文件时出错

Error loading json ui-skin file from android/assets

我有 default.json 文件,用于将皮肤设置为 ui 组件。之前的文件位置在项目包core/src/com/mygame中,其中有以下数据:

{
  com.badlogic.gdx.graphics.g2d.BitmapFont: {
    default-font: {
      file: Razer.fnt
    }
  },
  com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: {
    default: {
      up: default-round,
      down: default-round-down,
      font: default-font
    },
  },
  com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: {
    default:  {
      titleFont: default-font
    }
  }
}

然后我会在 onCreate 方法中加载该文件 skin = new Skin(Gdx.files.internal("default.json")); 哪个有效。

但是,现在我决定将该文件移动到名为 ui-skins/ 的资产文件夹中的 android 项目。问题是,当我尝试从路径 Gdx.files.internal("ui-skins/default.json"):

加载该文件时出现错误
Exception in thread "LWJGL Application" com.badlogic.gdx.utils.SerializationException: Error reading file: ui-skins/default.json
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:98)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.<init>(Skin.java:75)
    at com.unknown.game.MyUnknownGame.create(MyUnknownGame.java:32)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147)
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.run(LwjglApplication.java:124)
Caused by: com.badlogic.gdx.utils.SerializationException: Error reading file: ui-skins/default.json
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:694)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.load(Skin.java:96)
    ... 4 more
Caused by: com.badlogic.gdx.utils.SerializationException: Font file not found: Razer.fnt
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.read(Skin.java:472)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.read(Skin.java:463)
    at com.badlogic.gdx.utils.Json.readValue(Json.java:884)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.readValue(Skin.java:428)
    at com.badlogic.gdx.utils.Json.readValue(Json.java:852)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.readNamedObjects(Skin.java:449)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.read(Skin.java:438)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.read(Skin.java:434)
    at com.badlogic.gdx.utils.Json.readValue(Json.java:884)
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.readValue(Skin.java:428)
    at com.badlogic.gdx.utils.Json.fromJson(Json.java:692)
    ... 5 more

在此处测试您的 json

http://jsonlint.com/

您需要将字符串放在引号内,如下所示:

{ "com.badlogic.gdx.graphics.g2d.BitmapFont":{ ...

我发现了你的错误:

找不到字体文件:Razer.fnt 如错误日志中所述。

记住,你需要你的 font.fnt 文件和你的 font.png 文件在同一个文件夹结构中,就像以前一样(我想在同一个文件夹中,作为你的 JSON 文件).

希望对您有所帮助

€dit:进一步解释为什么你需要 font.png
如果查看 .fnt 文件,您会发现它只是文本,描述了字体的 .png。在这个 .png 中是字形。