2016-06-22 3 views
0

Я использую API Scene2D от Libgdx для создания пользовательского интерфейса, и все работает как ожидалось до сих пор. Я создал Skin и TextureAtlas и связал их так:Libgdx Scene2D Настольное фоновое изображение не отображается

Skin skin = new Skin(); 
TextureAtlas uiElements1 = new TextureAtlas("skins/uielements1.txt"); 
skin.addRegions(uiElements1); 
skin.load(Gdx.files.internal("skins/uiskin.json")); 

А потом я попытался создать Table:

Table table = new Table(skin); 
table.setWidth(stage.getWidth()); 
table.align(Align.center|Align.top); 
table.setPosition(0, Gdx.graphics.getHeight()); 
table.padTop(30); 
table.setBackground("grey_button02"); 

И, наконец, я добавил Label к Table:

Label gameTitle = new Label("Nameless Project", skin, "title"); 
table.add(gameTitle).padBottom(10).row(); 

Как только я добавил Table в мой Stage, только элементы в нем отображали и не фоновое изображение. Я пробовал использовать background(String s), setBackground(String s), background(Drawable d) и setBackground(Drawable d). Ни один из этих 4 методов, казалось, не работал для меня.

Я также пробовал звонить pack() и setFillParent(true), но оба из них заставили мой стол исчезнуть. Я прошел почти каждый результат Google, и я не могу найти кого-либо еще с моей проблемой.

EDIT

Вот мой uiskin.json файл

{ 
    com.badlogic.gdx.graphics.g2d.BitmapFont: { default-font: { file: fonts/FutureThin.fnt } }, 
    com.badlogic.gdx.scenes.scene2d.ui.TextButton$TextButtonStyle: { 
    default: { down: blue_button03, up: blue_button04, font: default-font }, 
    }, 
    com.badlogic.gdx.scenes.scene2d.ui.Window$WindowStyle: { 
    default: { 
     titleFont: default-font 
    } 
    }, 
    com.badlogic.gdx.scenes.scene2d.ui.Label$LabelStyle: { 
    title: { 
     font: default-font 
    } 
    } 
} 

И весь класс рендеринга сцены:

public class MainMenu implements Screen { 

    GameClass myGame; 

    Stage stage; 
    Skin skin; 

    Table table; 
    TextButton singlePlayer; 
    TextButton multiPlayer; 
    Label gameTitle; 


    public MainMenu(GameClass g) { 
     myGame = g; 

     // Create Skin, load texture Atlas, load skin 
     skin = new Skin(); 
     TextureAtlas uiElements1 = new TextureAtlas("skins/uielements1.txt"); 
     skin.addRegions(uiElements1); 
     skin.load(Gdx.files.internal("skins/uiskin.json")); 

     // Create stage 
     stage = new Stage(new ScreenViewport()); 

     // Create Table 
     table = new Table(skin); 
     table.setWidth(stage.getWidth()); 
     table.align(Align.center|Align.top); 
     table.setPosition(0, Gdx.graphics.getHeight()); 
     table.padTop(30); 
     table.setBackground("grey_button02"); 

     // Game Title 
     gameTitle = new Label("Nameless Project", skin, "title"); 
     table.add(gameTitle).padBottom(30).row(); 

     // Single Player button 
     singlePlayer = new TextButton("Single Player", skin, "default"); 
     singlePlayer.addListener(new ClickListener() { 
      @Override 
      public void clicked(InputEvent e, float x, float y) { 
       myGame.setScreen(new WorldTesting(myGame)); 
      } 
     }); 
     table.add(singlePlayer).width(300).padBottom(30).row(); 

     // Multiplayer Button 
     multiPlayer = new TextButton("Multiplayer", skin, "default"); 
     multiPlayer.setWidth(350); 
     multiPlayer.addListener(new ClickListener() { 
      @Override 
      public void clicked(InputEvent e, float x, float y) { 
       // Change Scenes 
      } 
     }); 
     table.add(multiPlayer).width(300).padBottom(30).row(); 

     stage.addActor(table); 
     Gdx.input.setInputProcessor(stage); 
    } 

    public void show() { 

    } 

    public void render(float delta) { 
     Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     stage.act(Gdx.graphics.getDeltaTime()); 
     stage.draw(); 
    } 

    public void hide(){ 

    } 
    public void resize(int x, int y) { 

    } 
    public void pause() { 

    } 
    public void resume() { 

    } 
    public void dispose() { 

    } 

} 
+0

Можете ли вы добавить содержимое файла скина? –

+0

Можете ли вы показать нам класс, который отображает сцену? – noone

+0

@WutipongWongsakuldej, я добавил оба запрошенных файла – Chris

ответ

1

Наконец нашел исправление. Вам нужно позвонить table.pack(), прежде чем фон появится. Я звонил table.pack(), но позиционировал таблицу на экране после пакета, поэтому я предположил, что pack() заставил его исчезнуть.

Смежные вопросы