繁体   English   中英

[LibGDX] [GWT]读取HTML [SerializationException]中的skin.json文件时出错

[英][LibGDX][GWT] Error reading file skin.json in HTML [SerializationException]

我在将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");加载它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是默认的URI,但是我更改为其他文件,仍然收到相同的错误。 (无法发布链接,因为我没有足够的声誉)

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

我认为这就是我尝试过的所有内容,也许还有更多事情,但现在不记得了。 我喜欢这2天或3天。 现在是我第一次使用libGDX部署到HTML。 这是我的环境:

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

英语不是我的主要语言,所以如果有错别字,对此表示抱歉。

将您的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));

@AbhishekAryan是的,我也尝试过并且失败了。 仍然感谢您的回复。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM