libGDX: widgets clàssics

libGDX treballa principalment amb l'objecte SpriteBatch renderitzant bitmaps. Però disposa també d'alguns widgets «clàssics» com Button , TextView , etc. No són el cas d'ús més habitual, però per facilitar la seva creació existeix la biblioteca Scene2D UI.

, , , , , , ,

Per afegir la funcionalitat de widgets standard com botons, textview, etc. caldrà:

Podeu descarregar els arxius (assets) de skin bàsic que es poden trobar aquí:

I després podem provar aquest codi amb un botó i un textView:

Main.java
package com.myuser.scenegdx;
 
import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.g2d.BitmapFont;
import com.badlogic.gdx.scenes.scene2d.InputEvent;
import com.badlogic.gdx.scenes.scene2d.Stage;
import com.badlogic.gdx.scenes.scene2d.ui.Label;
import com.badlogic.gdx.scenes.scene2d.ui.Skin;
import com.badlogic.gdx.scenes.scene2d.ui.TextButton;
import com.badlogic.gdx.scenes.scene2d.utils.ClickListener;
import com.badlogic.gdx.utils.viewport.FitViewport;
 
public class Main extends ApplicationAdapter {
    private Stage stage;
    private Skin skin;
    public FitViewport viewport;
    @Override
    public void create() {
        // Crear un Stage i un Skin
        viewport = new FitViewport(8,5);
        stage = new Stage(viewport);
        skin = new Skin(Gdx.files.internal("uiskin.json")); // Carregar un Skin per defecte
        float escala = viewport.getWorldHeight() / Gdx.graphics.getHeight();
 
        // Ajustem paràmetres per a la font
        Label.LabelStyle labelStyle = new Label.LabelStyle();
        labelStyle.font = new BitmapFont(); // Font per defecte
        labelStyle.font.setUseIntegerPositions(false);
        labelStyle.font.getData().setScale( escala );
 
        // Creem label (TextView)
        Label label = new Label("Hola, això és un TextView", labelStyle);
        label.setPosition(1, 1); // Posició del Label
 
        // Crear un Button
        TextButton button = new TextButton("Clica el botonet!", skin );
        button.setPosition(2, 2); // Posició del Button
        button.setTransform(true);
        button.setScale( 2*escala );
        button.addListener(new ClickListener() {
            @Override
            public void clicked(InputEvent event, float x, float y) {
                System.out.println("Botó clicat!");
            }
        });
 
        // Afegir els actors al Stage
        stage.addActor(label);
        stage.addActor(button);
 
        // Configurar l'Stage com a gestor d'entrada
        Gdx.input.setInputProcessor(stage);
    }
 
    @Override
    public void render() {
        // Netejar la pantalla
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
 
        // Actualitzar i dibuixar l'Stage
        stage.act(Gdx.graphics.getDeltaTime());
        stage.draw();
    }
 
    @Override
    public void dispose() {
        // Alliberar recursos
        stage.dispose();
        skin.dispose();
    }
}

A partir de l'exemple, fes una tasklist (només afegir tasques).