2016-12-12 134 views
1

當試圖從LibGDX的測試加載默認皮膚LibGDX默認皮膚不加載

https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests-android/assets/datauiskin.atlasuiskin.jsonuiskin.pngdefault.fnt

我收到以下錯誤消息。

Exception in thread "LWJGL Application" com.badlogic.gdx.utils.GdxRuntimeException: No com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle registered with name: default 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.get(Skin.java:149) 
    at com.badlogic.gdx.scenes.scene2d.ui.Skin.get(Skin.java:134) 
    at com.badlogic.gdx.scenes.scene2d.ui.TextField.<init>(TextField.java:116) 
    at com.badlogic.gdx.scenes.scene2d.ui.TextArea.<init>(TextArea.java:57) 
    at me.winter.socialplatformer.menu.ConnectScreen.show(ConnectScreen.java:30) 
    at com.badlogic.gdx.Game.setScreen(Game.java:61) 
    at me.winter.socialplatformer.Platformer.create(Platformer.java:39) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication.mainLoop(LwjglApplication.java:147) 
    at com.badlogic.gdx.backends.lwjgl.LwjglApplication$1.run(LwjglApplication.java:124) 

這裏是我是如何加載和使用皮膚:

assetManager = new AssetManager(); 
assetManager.load("gfx/uiskin.atlas", TextureAtlas.class); 

//... 

assetManager.finishLoading(); 

//... 

TextArea textArea = new TextArea("test", new Skin(getAssets().get("gfx/uiskin.atlas", TextureAtlas.class))); 
textArea.setBounds(100f, 100f, 500f, 500f); 

看起來它找不到這樣的:

com.badlogic.gdx.scenes.scene2d.ui.TextField$TextFieldStyle: { 
    default: { selection: selection, background: textfield, font: default-font, fontColor: white, cursor: cursor } 
}, 

然而,這條線是存在於文件從回購下載的uiskin.json。所有文件都是最新的。此外,該錯誤可能與IntelliJ給我的壞json語法警告相關聯。

Invalid syntax

回答

1

我相信問題是你如何試圖加載皮膚。幾件事情:

首先,我不知道libGDX中的AssetSupplier類。我打算假設你打算放入AssetManager。其次,在你的代碼中,你正在加載紋理地圖集(這個文件告訴libGDX切片和裁切UI圖像),而不是實際的Skin文件,它告訴Scene2D如何將外觀映射到UI元素。

很酷的事情是AssetManager足夠聰明,可以看到uiskin.json依賴於uiskin.atlas,並且會根據需要爲您加載atlas文件。然而,地圖集文件對皮膚一無所知,所以反過來不起作用。

嘗試加載皮膚像這個:

assetManager = new AssetManager(); 
assetManager.load("gfx/uiskin.json", Skin.class); 
assetManager.finishLoading(); 

ui = new Stage(); 
textArea = new TextArea("test", assetManager.get("gfx/uiskin.json", Skin.class)); 
ui.addActor(textArea); 

至於JSON結構,libGDX的示例代碼是使用「最小」格式,這種說法並不正確JSON。 libGDX附帶的JSON解析器可以很容易地讀取它,但將它轉換爲遊戲的「正確」格式將是一個好主意。無論如何,我們可能應該繼續修復它,因爲這似乎是一個反覆出現的問題。

+0

糟糕,AssetSupplier只是AssetManager的一個個人遺產類,它增加了一些小實用方法。將解決我的例子。但是,它的作用與AssetManager完全相同。 – Winter

+0

您完全正確,我嘗試加載該圖冊時出錯。 – Winter