LibGDX默认皮肤是什么?

48

我一直在跟进这个链接: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);

我的问题是,一个桌子需要哪种纹理,最重要的是,我如何将它们与桌子一起使用?

2个回答

92

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

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

LibGDX皮肤 - 包括三个部分:纹理包图像、纹理包文件和Json来设置样式。您也可以像您正在做的那样以编程方式生成它们,但我发现简单地从文件加载它们并使用它们要容易得多。如果您想了解更多有关如何制作、编辑皮肤等的内容,请访问此链接:皮肤

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

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

  1. Atlaspack文件
  2. Json文件
  3. Atlaspack图像
  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 },
}
希望这能帮助你入门。还有许多其他小细节,所以不要害怕查看维基上关于Scene2d.UI的文章获取更多信息。
注意:你可以使用gdx-tools工件来直接使用默认UI皮肤(对于非常简单的应用程序、调试、当你急于让UI可见等情况非常有用)。

5
@AreusAstarte 这是样式的JSON描述,查看上面文件列表中的第2项。 - noncom
2
noncom是正确的,我只是指出了那行json,因为它正是导致你遇到麻烦的那一行 :) - Jyro117
2
不需要字体图像,因为它已经包含在纹理集图像中。如果你想要替换字体,你需要使用原始资源重新打包它。 - Don Kirkby
很久以前(2011年末?)这是必需的,因为它是分离的。我不知道这个要求是否已经改变,但知道这一点很好。 - Jyro117
感谢您的帮助 - 您让我在Scene2D.ui方面的尝试变得更加轻松,这让我的晚上过得很愉快。干杯! - DeejUK
显示剩余5条评论

1

如果您想创建自己的皮肤,Raleus制作了一个皮肤编辑器, 界面友好,易于使用,结果非常棒。 https://github.com/raeleus/skin-composer 一旦您浏览一下它,您就会更了解皮肤以及如何使用它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接