LibGDX默认皮肤未加载

时间:2016-12-12 15:30:32

标签: java libgdx scene2d

尝试从LibGDX测试

加载默认皮肤时

https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests-android/assets/data uiskin.atlas uiskin.json uiskin.png default.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 }
},

但是,此行存在于从repo下载的文件uiskin.json中。所有文件都是最新的。另外,错误可能与IntelliJ给我的错误的json语法警告有关。

Invalid syntax

1 个答案:

答案 0 :(得分:1)

我认为问题在于你是如何尝试加载皮肤的。一些事情:

首先,我不知道libGDX中的AssetSupplier类。我假设您打算放入AssetManager

其次,在您的代码中,您正在加载纹理图集(该文件告诉libGDX切片并切割UI图像),而不是实际的Skin文件,它告诉Scene2D如何将皮肤映射到UI元素。

很酷的是,AssetManager非常聪明,可以看到uiskin.json依赖于uiskin.atlas,并会根据需要为你加载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的示例代码使用的是&#39; minimal&#39;格式不是很合适的JSON。 libGDX附带的JSON解析器可以很容易地读取它,但最好将它转换为适当的&#39;你的游戏格式。我们可能应该继续修复它,因为这似乎是一个反复出现的问题。