【问题标题】:[LibGDX][GWT] Error reading file skin.json in HTML [SerializationException][LibGDX][GWT] Error reading file skin.json in HTML [SerializationException]
【发布时间】:2017-06-29 03:52:10
【问题描述】:

我在将 libGDX 项目部署到 HTML 时遇到了一些问题。我有一个 skin.json 文件来加载基本的 GUI 和字体。它在 Android 和桌面上完美运行,但在 HTML 中却不行。这是堆栈跟踪:

Uncaught Error: java.lang.RuntimeException: com.badlogic.gdx.utils.GdxRuntimeException: com.badlogic.gdx.utils.SerializationException: Error reading file: data/skins/logo_and_font/logo_and_font.json
    at f_b.V$b [as jQ] (html-0.js:7370)
    at f_b.Y$b [as lQ] (html-0.js:7370)
    at f_b.b_b (html-0.js:5252)
    at f_b (html-0.js:1161)
    at Be (html-0.js:6955)
    at Ge (html-0.js:6136)
    at di (html-0.js:6583)
    at wh.xh [as Oc] (html-0.js:7361)
    at HTMLImageElement.eval (html-0.js:5881)

这是我试图加载的 .json 文件:

{
  "com.badlogic.gdx.graphics.Color":{
    "green":{"a":1, "b":0, "g":1, "r":0},
    "white":{"a":1, "b":1, "g":1, "r":1},
    "red":{"a":1, "b":0, "g":0, "r":1 },
    "black":{"a":1, "b":0, "g":0, "r":0}
  },
  "com.badlogic.gdx.graphics.g2d.BitmapFont":{
    "default-font":{
      "file":"basic_font.fnt"
    }
  },
  "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle":{
    "default":{
      "font":"default-font",
      "fontColor":"white"
    }
  }
}

如果我删除 BitmatFont 和 LabelStyle 块代码,它将加载而不会出现任何错误

"com.badlogic.gdx.graphics.g2d.BitmapFont":{
    "default-font":{
      "file":"basic_font.fnt"
    }
  },
  "com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle":{
    "default":{
      "font":"default-font",
      "fontColor":"white"
    }
  }

我已经在 Opera、Google Chrome、Firefox 和 Internet Explorer 中对其进行了测试。和同样的错误。所以它与浏览器无关。该游戏正在使用 express 的 NodeJs 服务器中提供服务,但我也尝试使用 Apache (XAMPP) 和同样的问题,所以不要认为与服务器相关。我也尝试过 html:superDev 和同样的问题。我已经从 json 文件中删除了引号和同样的问题。

我使用资产管理器加载 .json 文件,这里是我如何加载它的代码。我以这种方式加载它,因为我只是加载创建加载屏幕所需的基本内容,然后加载其他资产。

this.manager = new AssetManager();
this.assets = new ObjectMap<String, String>();

this.assets.put("logo_and_font_skin", "data/skins/logo_and_font/logo_and_font.json");
this.manager.load(this.assets.get("logo_and_font_skin"), Skin.class);
this.manager.finishLoading();

如果我直接用Gdx.files.internal("data/skins/logo_and_font/logo_and_font.json"); 加载它,我会得到同样的错误。

在我的 *.gwt.xml 文件中,我已经指定了要反映到 libGDX Wiki 的类

<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.graphics.g2d.BitmapFont"/>
<extend-configuration-property name="gdx.reflect.include" value="com.badlogic.gdx.scenes.scene2d.ui.Label" />

*.gwt.xml 的 URI 是默认的,但我已经更改为其他的,但仍然得到相同的错误。 (无法发布链接,因为我没有足够的声誉)

我使用 gradlew.bat html:dist 编译项目,它在 /build/dist 中生成了一些文件,这些文件是我用来为游戏提供服务的文件。

我想这就是我所尝试的全部,也许还有一些东西,但现在不记得了。我在这个或 3 天有 2 天。这是我第一次使用 libGDX 部署到 HTML。这是我的环境:

  • IDE:Android Studio 2.2.3
  • libGDX 版本:1.9.5
  • Gradle 版本:2.2.3
  • GWT 版本:2.8.0
  • JDK:1.8.0

英语不是我的主要语言,所以如果有错别字,请见谅。

【问题讨论】:

    标签: java json node.js gwt libgdx


    【解决方案1】:

    将 BitmapFont 放入 .json 文件中引用的 AssetManager。

    在资产管理器上使用 finishLoading。 从 AssetManager 获取您的 BitmapFont。

    BitmapFont x= manager.get(".....", BitmapFont.class);
    

    将该字体放入 ObjectMap

    ObjectMap<String, Object> font_map = new ObjectMap<String, Object>();
    font_map.put("nameOfFont", x);
    

    使用 SkinLoader 并将您的依赖项作为参数传递。

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

    【讨论】:

      【解决方案2】:

      @AbhishekAryan 是的,我尝试过,但也失败了。无论如何感谢您的回复。

      我一直在使用不同的加载 BitmapFont 的方式进行测试,但总是因错误而失败。我开始认为这可能是 libGDX 的错误,确实是这样,我将 libGDX 更新为 1.9.6-SNAPSHOT,问题就解决了。我完美地从我的 uiskin.json 加载了 BitmapFont。

      【讨论】:

      • 很好,如果您找到了解决方案。最好找1.9.5版本的问题,在github上创建issue。
      猜你喜欢
      • 2021-11-03
      • 2019-12-11
      • 2020-03-12
      • 2020-01-31
      • 1970-01-01
      • 2016-05-27
      • 1970-01-01
      • 2022-12-02
      • 1970-01-01
      相关资源
      最近更新 更多