martes, 1 de marzo de 2016

Tutorial 3: Corriendo en Android.

Buenas a todos.
En el pasado tutorial aplicamos cierto dinamismo a nuestra plantilla que libGDX nos proporciona. En esta ocasiona veremos como ajustar nuestro ejemplo a un dispositivo real, ya que la emulación no es capaz de imitar el acelerómetro.
El codigo:

package sv.chuckles.tuto1;

import com.badlogic.gdx.ApplicationAdapter;
import com.badlogic.gdx.Gdx;
import com.badlogic.gdx.Input.Keys;
import com.badlogic.gdx.graphics.GL20;
import com.badlogic.gdx.graphics.Texture;
import com.badlogic.gdx.graphics.g2d.Sprite;
import com.badlogic.gdx.graphics.g2d.SpriteBatch;

public class Tuto1 extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
Sprite sprite;

@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
sprite = new Sprite(img);
sprite.setPosition(200, 100);
sprite.setScale(0.75f);
sprite.setRotation(45);
}

@Override
public void render () {
float rotar = 5;
Gdx.gl.glClearColor(0.5f, 0.5f, 0.5f, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
rotar += sprite.getRotation();
if(rotar > 360) rotar = 5;
sprite.setRotation(rotar);

float dirX = Gdx.input.getAccelerometerY();
float dirY = Gdx.input.getAccelerometerX();
float x = sprite.getX();
float y = sprite.getY();

if(dirX == 0){
if(Gdx.input.isKeyPressed(Keys.LEFT))
x -= 5;
else if(Gdx.input.isKeyPressed(Keys.RIGHT))
x += 5;
}else{
if(dirX < 0)
x -= 5;
else
x += 5;
}
if(dirY == 0){
if(Gdx.input.isKeyPressed(Keys.UP))
y += 5;
else if(Gdx.input.isKeyPressed(Keys.DOWN))
y -= 5;
}else{
if(dirY < 0)
y += 5;
else
y -= 5;
}
if(x < 0) x=0;
if(y < 0) y=0;
if(x>Gdx.graphics.getWidth()) x=Gdx.graphics.getWidth();
if(y>Gdx.graphics.getHeight()) y=Gdx.graphics.getHeight();
sprite.setPosition(x, y);
sprite.draw(batch);
batch.end();
}
}

Podemos ejecutarlo en nuestro dispositivo, y movemos el mobil, y veremos como la imagen se mueve de un  lado para otro y girando al mismo tiempo.

Explicacion:
Las lineas float dirX = Gdx.input.getAccelerometerY(); y float dirY = Gdx.input.getAccelerometerX();, es la manera que ligGDX obtiene los valores del acelerómetro, lo importante es que si no detecta o no esta disponible el  acelerometro, libGDX nos devolvera cero.
En la variable x e y, guardamos esos valores del sprite.
Preguntamos si dirX es cero, si es cero significa que no hay acceleracion y verificamos si se ha presionado una tecla cursora.Si es que el valor de dirX es diferente de cero, preguntamos si es negativo, si es negativo restamos 5 pixeles a la posición. Esta misma lógica funciona para X e Y.
Es bien intuitivo saber como funciona.
Vale aclarar las validaciones finales. donde validamos que la posición X no sea negativa ni mayor al ancho de la pantalla. Esto mismo funciona para Y.

Ya Con esto finalizamos los primeros pasos, aquí tiene que practicar.

Esta la siguiente semana, que veremos un tutorial mas tecnico, sin tanta teoria.
Saludos
Sigueme en Twiter: https://twitter.com/libgdxESA

Si te gusta mi trabajo y quisieras ver mas y mas rápido, puedes donar $1.00 vía donación paypal:

No hay comentarios.:

Publicar un comentario