2013-04-24 207 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