2013-04-24 137 views
37

我一直在关注这个:https://code.google.com/p/table-layout/#Quickstart来了解一下LibGDX中的表格。我已经尝试了一下按钮。默认皮肤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); 

我现在的问题是表格需要什么样的纹理,最重要的是,我如何在表格中使用它们。

回答

79

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

表布局 - 这是Scene2d UI的结构和格式。你提供的链接是一个很好的教程,但是你已经意识到,你需要一个皮肤来做大部分事情。

LibGDX皮肤 - 包含3件东西,纹理包图像,纹理包文件和用于设置样式的Json。你也可以像你一样以编程方式生成它们,但是我发现从文件中加载它们并使用它更容易。如果您想了解更多关于如何制作皮肤或编辑皮肤的信息,请点击此链接:Skins

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

什么,你可以简单地做的是使用在测试文件夹中提供的模板:

  1. Atlaspack File
  2. Json File
  3. Atlaspack Image
  4. Font Image
  5. Font File

将这些文件放在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 }, 
} 

希望这可以帮助你开始。还有其他一些小东西,所以不要害怕查看维基上的Scene2d.UI文章以获取更多信息。

注:您可以使用gdx-tools神器能够使用the default UI skin外的开箱(可以是非常小的/简单的应用程序非常有用,对于调试,当你在一个真正急于可见的UI等)。

+0

哇,谢谢你的真棒回答:) 我真的不能让我的头缠着的唯一的东西是最后一块代码是什么? :o – AreusAstarte 2013-04-24 12:13:19

+4

@AreusAstarte它是样式的json描述,请参阅上面的文件列表中的第2项 – noncom 2013-04-24 12:22:52

+1

noncom是正确的,我只是指出了json的一行,因为它确实导致了您的麻烦:) – Jyro117 2013-04-24 16:47:22