Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LibGDX默认皮肤未加载_Java_Libgdx_Scene2d - Fatal编程技术网

Java LibGDX默认皮肤未加载

Java LibGDX默认皮肤未加载,java,libgdx,scene2d,Java,Libgdx,Scene2d,尝试从LibGDX的测试加载默认外观时 (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: de

尝试从LibGDX的测试加载默认外观时

uiskin.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)
看起来它找不到这个:

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语法警告有关


我认为问题在于如何加载皮肤。有几件事:

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

其次,在代码中加载的是纹理图集(该文件告诉libGDX对UI图像进行切片),而不是实际的皮肤文件,该文件告诉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的示例代码使用的是一种不太合适的JSON的“最小”格式。libGDX附带的JSON解析器可以很容易地读取它,但是最好将它转换为适合您的游戏的“适当”格式。不管怎样,我们可能都应该继续修复它,因为这似乎是一个反复出现的问题。

Oops,AssetApplication只是AssetManager的一个personnal herited类,它添加了一些小的实用方法。将修正我的示例。但是,它的工作与AssetManager完全相同您完全正确,我的错误是尝试加载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);