====== 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 [[https://libgdx.com/wiki/graphics/2d/scene2d/scene2d-ui|biblioteca Scene2D UI]].
{{tag> #Dam #DamMp08 #DamMp08Uf3 #DamMp08Uf03 #DamMp08Uf3 Android mobile java }}
Per afegir la funcionalitat de widgets standard com botons, textview, etc. caldrà:
* Afegir un //skin// amb arxius de imatges i fonts.
* Utilitzar l'objecte ''Stage'' que ens renderitzarà l'escena amb els //widgets//.
Podeu descarregar els [[https://github.com/libgdx/libgdx-skins/tree/master/skins/visui/assets|arxius (assets) de skin bàsic que es poden trobar aquí]]:
* default.fnt
* font-small.fnt
* uiskin.atlas
* uiskin.json
* uiskin.png
I després podem provar aquest codi amb un botó i un textView:
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).