46

我一直在关注这个: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();

但它抛出一个NullPointerException因为:No 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);

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

4

2 回答 2

91

当谈到 libGDX 中的 UI 时,您会发现它与您之前使用的(yaml、json、xml、UI Builders 等)非常不同。

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

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

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

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

  1. Atlaspack 文件
  2. json文件
  3. Atlaspack 图片
  4. 字体图像
  5. 字体文件

将这些文件放在你的 android 项目的 assets 文件夹中。然后你可以用一行代码轻松加载这个皮肤:

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文章以获取更多信息。

注意:您可以使用gdx-toolsartifact 来使用开箱即用的默认 UI 皮肤(对于非常小的/简单的应用程序、调试、当您急于使 UI 可见时非常有用, ETC)。

于 2013-04-24T07:42:48.580 回答
1

或者,如果您想创建自己的,Raleus 制作了一个皮肤编辑器,非常友好的用户界面,使用简单,结果 很棒更多关于皮肤以及你如何使用它们的信息

于 2020-04-09T21:46:42.067 回答