martes, 18 de diciembre de 2012

Tutorial Boton Sprite AndEngine GLES 2.0

Aquí os traigo un tutorial muy sencillo, que explica como crear un botón en AndEngine GLES 2.0.
Hay varias maneras de hacerlo, como lo defino en este tutorial o creando un menú. El tema de crear menús lo tratare en el siguiente tutorial.
Empezamos creando nuestro proyecto AndEngine y metiendo un sprite en la carpeta assets como se explica en un tutorial anterior.
Luego en nuestra clase que extiende a SimpleBaseGameActivity definimos las variables que vamos a utilizar:
private static final int CAMERA_WIDTH = 800;
private static final int CAMERA_HEIGHT = 480;
private BitmapTextureAtlas mBitmapTextureAtlas;
private ITextureRegion mBotonTextureRegion;
private ButtonSprite boton;
Las dos primeras son el ancho y el alto de la camara.
Las dos siguientes se utilizan para definir nuestro mapa de texturas y cargar nuestro archivo de imagen en una posición dentro de él.
Y la ultima define nuestro botón.


Ahora os voy a pegar el código que es igual en casi todos los tutoriales de andengine.
public EngineOptions onCreateEngineOptions() {
final Camera camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT);

return new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new RatioResolutionPolicy(CAMERA_WIDTH, CAMERA_HEIGHT), camera);
}

public void onCreateResources() {
BitmapTextureAtlasTextureRegionFactory.setAssetBasePath("gfx/");

this.mBitmapTextureAtlas = new BitmapTextureAtlas(this.getTextureManager(), 512, 512);
mBotonTextureRegion = BitmapTextureAtlasTextureRegionFactory.createFromAsset(this.mBitmapTextureAtlas, this,
"botontuto.png", 0, 0);
this.mBitmapTextureAtlas.load();
}
No lo explico ya porque esta explicado en el tutorial de Sprite.
Por ultimo nos vamos a onCreateScene() y pegamos lo siguiente:
this.mEngine.registerUpdateHandler(new FPSLogger());

final Scene scene = new Scene();
scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f));
boton = new ButtonSprite(100, 100, this.mBotonTextureRegion, this.getVertexBufferObjectManager(), new OnClickListener() {
            
           
            public void onClick(ButtonSprite pButtonSprite, float pTouchAreaLocalX,
                            float pTouchAreaLocalY) {      
                   boton.setPosition(boton.getX()+20, boton.getY()+20);
            }
    });
scene.attachChild(boton);
scene.registerTouchArea(boton);
return scene;

El código de las tres primeras lineas ya lo conocemos , nos define el motor, la escena y un color de fondo en 
Las siguientes líneas nos definen nuestro botón, los numeros nos definen la X y la Y del botón. 
this.mBotonTextureRegion nos define sitio dentro de nuestro mapa de texturas.
Lo nuevo con respecto al tutorial de sprite es definir el onClickListener. Que consiste en definir que al tocar esa sprite realice alguna acción. Es la parte que sale en rojo y yo he definido que el botón se desplace 20 pixeles a la derecha y 20 pixeles hacia abajo.
Para finalizar le decimos a la escena que haga aparecer el botón y que registre el botón como área de contacto, que es la parte de código de atacchChild y registerTouchArea respectivamente.
El archivo java completo y la imagen que he utilizado os lo dejo en mi GitHub.
Aquí tenéis dos impresiones de la pantalla de como queda este tutorial:



Espero que os sirva.
Un saludo.



4 comentarios:

  1. muy buenos tus tutoriales, sabes como podria hacer que al pulsar un boton asociado a un onclick listener, cambiar la imagen del sprite animado?

    (quiero hacer que al pulsar el boton mi sprite animado, que es un personaje, cambie por un momento y muestre el personaje haciendo un gesto de disparo y luego que siga con su animacion por defecto)

    ResponderEliminar
  2. me uno a la peticion anterior....me gustaria saber como hacer por ejemplo que al pulsar el boton verde que es un .png me muestre por pantalla otro .png con un boton rojo por ejemplo (substituyendo al anterior boton) y que al soltar o al cabo de un segundo vuelva a salir el de color verde.

    no se si me he explicado bien XD

    ResponderEliminar
  3. Una funcion parecida ha esta, al hacer onClick te puede funcionar para cambiar de Estado tu imagen. Si quiere que tras un tiempo vuelva en vez de al tocar otra vez usa un TimeHandler.
    public void tocar()
    {
    if(estado==false){
    estado=true;
    detachChild(jugador);
    jugador=new AnimatedSprite(300, 200, activity.imagen1, activity.getVertexBufferObjectManager());
    attachChild(jugador);
    return;
    }
    if(estado==true){
    estado=false;
    detachChild(jugador);
    jugador=new AnimatedSprite(300, 200, activity.imagen, activity.getVertexBufferObjectManager());
    attachChild(jugador);
    jugador.animate(100);
    return;
    }

    }

    ResponderEliminar
  4. muchisimas gracias por tu tiempo, cuando tenga tiempo probare de implementarlo

    ResponderEliminar