LibGDX 默认皮肤未加载
LibGDX default skin not loading
尝试从 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.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 语法警告有关。
我认为问题在于您尝试加载皮肤的方式。一些事情:
首先,我不知道 libGDX 中有 AssetSupplier
class。我假设您打算输入 AssetManager
.
其次,在您的代码中,您正在加载纹理图集(告诉 libGDX 对 UI 图像进行切片和切块的文件),而不是告诉 Scene2D 如何切片的实际皮肤文件将皮肤映射到 UI 元素。
很酷的是 AssetManager 足够聪明,可以看到 uiskin.json 依赖于 uiskin.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 的示例代码使用的 'minimal' 格式不太合适 JSON。 libGDX 附带的 JSON 解析器可以很容易地读取它,但最好将其转换为游戏的 'proper' 格式。无论如何我们可能应该继续修复它,因为这似乎是一个反复出现的问题。
尝试从 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.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 语法警告有关。
我认为问题在于您尝试加载皮肤的方式。一些事情:
首先,我不知道 libGDX 中有 AssetSupplier
class。我假设您打算输入 AssetManager
.
其次,在您的代码中,您正在加载纹理图集(告诉 libGDX 对 UI 图像进行切片和切块的文件),而不是告诉 Scene2D 如何切片的实际皮肤文件将皮肤映射到 UI 元素。
很酷的是 AssetManager 足够聪明,可以看到 uiskin.json 依赖于 uiskin.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 的示例代码使用的 'minimal' 格式不太合适 JSON。 libGDX 附带的 JSON 解析器可以很容易地读取它,但最好将其转换为游戏的 'proper' 格式。无论如何我们可能应该继续修复它,因为这似乎是一个反复出现的问题。