====== 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).