默认皮肤 LibGDX?

2022-08-31 23:58:01

我一直在关注这个:https://code.google.com/p/table-layout/#Quickstart 来了解LibGDX中的表。我已经用按钮做了一些实验。

现在我有这个代码:

Label introLabel = new Label("Skip Intro", skin);
TextField introText = new TextField("", skin);

table.add(introLabel);
table.add(introText).width(100);
table.row();

但它抛出了一个因为:NullPointerExceptionNo com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle registered with name: default

我只将我的按钮(来自屏幕中的其他地方)添加到皮肤中:

atlas = new TextureAtlas("assets/gui/buttons/alpha_generic_buttons.pack");

skin = new Skin();
skin.addRegions(atlas);

我现在的问题是桌子需要什么样的纹理,最重要的是,我如何将它们与桌子一起使用?


答案 1

当涉及到libGDX中的UI时,你会发现它与你以前使用的UI非常不同(yaml,json,xml,UI Builders等)。

表布局 - 这就是 Scene2d UI 的结构和格式设置方式。您提供的链接是一个很棒的教程,但是正如您已经意识到的那样,您需要一个皮肤来做大多数事情。

LibGDX 皮肤 - 由 3 个内容组成,一个纹理包图像、一个纹理包文件和一个用于设置样式的 Json。您也可以像现在这样以编程方式生成它们,但我发现简单地从文件中加载它们并使用它们要容易得多。如果您想了解有关如何制作皮肤或编辑皮肤等的更多信息,请访问以下链接:皮肤

现在,回到你得到的例外。这是因为您创建的皮肤没有用于描述各种UI元素样式的json。在上述异常情况下,文本字段内的标签没有默认样式。

您可以简单地使用 tests 文件夹中提供的模板:

  1. 阿特拉斯包文件
  2. Json File
  3. 阿特拉斯包图像
  4. 字体图像
  5. 字体文件

将这些文件放在Android项目的资产文件夹中。然后,您可以使用一行代码轻松加载此皮肤:

Skin uiSkin = new Skin(Gdx.files.internal("uiskin.json"));

这将包含丢失的信息来使 TextField 成为对象,以及一堆其他默认样式:

com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: {
    default: { font: default-font, fontColor: white },
}

希望这有助于您入门。还有许多其他小事情,所以不要害怕查看wiki上的Scene2d.UI文章以获取更多信息。

注意:你可以使用 artifact 来开箱即用地使用默认的 UI 外观(对于非常小/简单的应用程序、调试、当你非常急于让 UI 可见时,这可能非常有用, 等等)。gdx-tools


答案 2

或者,如果你想创建自己的,Raleus编造了一个皮肤编辑器,非常友好的Ui,简单易用,结果很棒 https://github.com/raeleus/skin-composer 一旦你导航扔了一点,你对皮肤和tu use'em的方式有了更多的了解。