2017-02-10 34 views
0

我在將libGDX項目部署到HTML時遇到了一些問題。我有一個skin.json文件來加載基本的圖形用戶界面和字體。它在Android和桌面上完美工作,但在HTML中卻不行。這裏是堆棧跟蹤:[LibGDX] [GWT]在HTML中讀取文件skin.json時出錯[SerializationException]

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中進行了測試。和同樣的錯誤。所以它不是瀏覽器相關的。該遊戲正在使用快遞服務於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文件,我已經指定了將要反映到arcording 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" /> 

URI的* .gwt.xml是默認的一個類,但我有改變他人,仍然會得到相同的錯誤。 (不能發佈的鏈接,因爲我沒有足夠的聲譽)

我編譯gradlew.bat html:dist也產生了一些文件的項目在/構建/ DIST和那些文件是一個我用來服務於遊戲。

我想這就是我所有的嘗試,也許更多的事情,但現在不記得了。我在這個或3天裏有2天的時間。這是我用IBM libGDX部署到HTML的第一時間。下面是我的環境:

  • IDE:安卓2.2.3工作室
  • libGDX版本:1.9.5
  • 搖籃版本:2.2.3
  • GWT版本:2.8.0
  • JDK: 1.8.0

英語不是我的主要語言,所以如果出現一些錯別字,對不起。

回答

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)); 
0

@AbhishekAryan是的,我嘗試了,也失敗了。無論如何感謝您的迴應。

我一直在用加載BitmapFont的不同方式進行測試,並總是失敗並報錯。我開始想,也許這是libGDX的錯誤,確實是這樣,我將libGDX更新爲1.9.6-SNAPSHOT,問題就解決了。我完美地從我的uiskin.json中加載了BitmapFont。

+0

不錯,如果你找到你的解決方案。最好找到1.9.5版本的問題,並在github上創建問題。 – Aryan