13 Stimmen

UI-API für libgdx

Android- und libgdx-Neuling hier.

Weiß jemand etwas über die neue UI-API, die für libgdx veröffentlicht wurde? Siehe Blogbeitrag hier: http://www.badlogicgames.com/wordpress/?p=2058

Ich möchte ein einfaches Menüsystem erstellen und frage mich, ob diese UI-API dies erleichtern würde.

23voto

Doran Punkte 3911

Aktualisiert, um Änderungen an der LibGDX zu berücksichtigen

Ich bin in einer ähnlichen Position, der folgende Code funktionierte für mich ein grundlegendes Menü (ein Container von Schaltflächen) zu erstellen. Der Code wird nicht funktionieren, wie es ist, weil es einige meiner Klassen verwendet, aber was wirklich wichtig ist, ist der Inhalt der create-Methode. Dies schafft eine zentrierte Titel, dann einige Tasten in einem Container, der zentriert wird, dann fps Label in der unteren linken und ein Bild in der unteren rechten Ecke. Die Themendateien und einige der Bilder stammen aus der LibGDX testet Vermögenswerte .

Ich habe dies mit den JOGL-, LWJGL- und Android-Anwendungsklassen zum Laufen gebracht. Ich habe es auf einem Droid 2 und bekam es zu laufen, wie es auf meinem Desktop tat. Hoffentlich sollte dies erhalten Sie begonnen.

public class MenuScreen extends Screen{
private Stage ui;
private Table window;
@Override
public void create(final Game game) {
    super.create(game);
    TextureRegion image = new TextureRegion(new Texture(Gdx.files.internal(Art.badlogicSmall)));
    Label fps = new Label("fps: ", Art.sSkin.getStyle(LabelStyle.class),"fps");
    ui = new Stage(Gdx.graphics.getWidth(),Gdx.graphics.getHeight(), true);
    Gdx.input.setInputProcessor(ui);
    window = new Table("window");
    window.width = ui.width();
    window.height = ui.height();
    window.x = 0;
    window.y = 0;
    window.debug();
    Label title = new Label("Title",Art.sSkin.getStyle(LabelStyle.class),"title");
    Button newGame = new Button("New Game",Art.sSkin.getStyle(ButtonStyle.class),"new");
    newGame.setClickListener(new ClickListener() {
        @Override
        public void click(Actor actor) {
            game.setScreen(GameScreen.class);               
        }
    });
    Button optionMenu = new Button("Option",Art.sSkin.getStyle(ButtonStyle.class),"Options");
    Button helpMenu = new Button("Help",Art.sSkin.getStyle(ButtonStyle.class),"Help");
    Image libgdx = new Image("libgdx", image);
    window.row().fill(false,false).expand(true,false).padTop(50).padBottom(50);
    window.add(title);
    Table container = new Table("menu");
    container.row().fill(true, true).expand(true, true).pad(10, 0, 10, 0);
    container.add(newGame);
    container.row().fill(true, true).expand(true, true).pad(10, 0, 10, 0);
    container.add(optionMenu);
    container.row().fill(true, true).expand(true, true).pad(10, 0, 10, 0);
    container.add(helpMenu);
    window.row().fill(0.5f,1f).expand(true,false);
    window.add(container);
    Table extras = new Table("extras");
    extras.row().fill(false,false).expand(true,true);
    extras.add(fps).left().center().pad(0,25,25,0); 
    extras.add(libgdx).right().center().pad(0,0,25,25);
    window.row().fill(true,false).expand(true,true);
    window.add(extras).bottom();
    ui.addActor(window);
}

@Override
public void render(float arg0) {
    Gdx.gl.glClearColor(0.2f, 0.2f, 0.2f, 1);
    Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
    ((Label)ui.findActor("fps")).setText("fps: " + Gdx.graphics.getFramesPerSecond());  
    ui.act(Math.min(Gdx.graphics.getDeltaTime(), 1 / 30f));
    ui.draw();
    Table.drawDebug(ui);
}
@Override
public void resize(int width, int height) {
    ui.setViewport(width, height, true);
    Log.d("Resize: "+width+", "+height);
}

7voto

noar Punkte 73

Ja, die neue UI-Api ist sehr einfach zu bedienen. Sie können die Haut Objekt zu erstellen, um einige Schauspieler Objekt, und verbinden Sie sie dann mit dem Bühne objet.

Sie können die Datei UITest.java in den libgdx-Quellen referenzieren. Sie demonstriert die Verwendung der grundlegenden UI-Elemente.

Von niedriger Ebene zu sehen, die libgdx neue UI, es nur das folgende Element enthalten:

  • NinePatch: die grundlegende Form Objekt für die Erstellung des Elements könnte strecken sich auf;
  • Region: das Formobjekt für das Element mit fester Größe;
  • Schriftart: das Bitmapfont-Objekt für den Anzeigetext;

Das übergeordnete Element besteht aus ihnen, wie z.B. das Button-Objekt, include: ninepatch und font ojbect, und so weiter.

So können Sie sehr einfach die 2D UI mit ihnen erstellen :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X