2016-12-12 66 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