当前位置: 首页 > 知识库问答 >
问题:

LibGDX默认皮肤不加载

曹子平
2023-03-14

尝试从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 }
},

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

共有1个答案

斜俊
2023-03-14

我相信问题在于你如何试图加载皮肤。一些事情:

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

其次,在你的代码中,你加载的是纹理图集(这个文件告诉libGDX对用户界面图像进行切片和切片),而不是实际的皮肤文件,这个文件告诉Scene2D如何将皮肤映射到用户界面元素。

最酷的是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解析器可以很容易地读取它,但是最好将它转换为适合您的游戏的“适当”格式。不管怎样,我们可能应该继续解决它,因为这似乎是一个反复出现的问题。

 类似资料:
  • 问题内容: 我一直在关注以下内容:https : //code.google.com/p/table- layout/#Quickstart, 以获得LibGDX中表格的一些简介。我已经尝试了一些按钮。 现在我有这段代码: 但这引发了一个原因: 我只将按钮(从屏幕上的其他位置)添加到皮肤中: 我的问题现在是桌子需要什么样的纹理,最重要的是,如何在桌子上使用它们? 问题答案: 当谈到libGDX中的

  • 我注意到,当我在JVM 7和JVM 8上运行JavaFX应用程序时,我得到了不同的默认外观。如何将每个JVM上的默认皮肤设置为相同?

  • 问题内容: 在我的uiskin.json中,我有这个 当我在Assets文件夹的文本文件夹中有default.fnt时,这很好。 但是我想使用一个Freetypefont。 如何创建Freetypefont并将其加载到uiskin文件中? 问题答案: 不可能事先做,因为您将在运行时生成它。 我的解决方法是保持默认字体不变,并在运行时通过代码替换它。您可以使用它。

  • 皮肤 皮肤机制为 moye 控件提供强大的样式自定义能力,可以支持 自定义样式 与 换肤 / 风格主题 。 功能特点: 首先,每个控件都有一个基础样式类型: ui-{type},其中{type}表示控件的主类型; 其次,控件可以设定皮肤参数,并可以指定多个皮肤。每个皮肤设定都会添加两个样式类型: skin-{skin} 与 skin-{skin}-{type}, 其中 {skin} 表示设定的皮肤

  • 我已经使用Skin composer创建了一个libgdx皮肤。问题是所有的图片按钮,字体都很大。我如何处理尺寸?我应该缩小图像的大小还是有其他方法?我试着用按钮。设置大小(x,y),但不起作用:|

  • 我想使用dialog类实现一个简单的对话框。我尝试使用这里提供的标准皮肤文件 https://github.com/libgdx/libgdx/tree/master/tests/gdx-tests-android/assets/data 尤斯金。阿特拉斯 尤斯金。json 尤斯金。巴布亚新几内亚 默认。巴布亚新几内亚 默认。fnt 我下载了RAW,但我无法让它们工作。 json中的第一行: 抛出