LIBGDX Acelerometro
UNIDADE 3: Acelerómetro / Compás
Introdución
Nota: Este modo de control está relacionado coa xestión de eventos.
- O acelerómetro é un dispositivo hardware que nos indica en metros por segundo a aceleración do dispositivo en calquera dos tres eixes.
Información da wiki: https://github.com/libgdx/libgdx/wiki/Accelerometer
- Imaxe obtida de https://github.com/libgdx/libgdx/wiki/Accelerometer
- Un compás mide a inclinación en grados do dispositivo.
Información: http://www.badlogicgames.com/wordpress/?p=1490
- Imaxe obtida de http://developer.android.com/reference/android/hardware/SensorManager.html#getOrientation
Para saber se dispoñemos do hardware debemos chamar ó método isPeripheralAvailable.
Por exemplo:
- Gdx.input.isPeripheralAvailable(Peripheral.Compass): devolve true / false.
- Gdx.input.isPeripheralAvailable(Peripheral.Accelerometer): devolve true / false.
Permisos: Non é necesario engadir un permiso para facer uso do hardware do dispositivo, pero podemos indicar ó usuario que o xogo vai facer uso deles e incluso, se poñemos o xogo no Market, podemos facer que non poida ser instalado se non se ten dito hardware.
- Se escollemos a opción 'Required' indicamos que é necesario dito hardware para que o xogo funcione.
Compás
Para poder utiliza o compás debemos de indicalo na clase AndroidLauncher do proxecto Android:
config.useCompass=true;
No caso do compás podemos facer uso dos seguintes métodos que devolven un valor en grados:
- Azimut: Ángulo de rotación arredor do eixe Z: Gdx.input.getAzimuth(). Pode ser utilizado para alinear algo có polo norte magnético.
- Pitch: Ángulo de rotación arredor do eixe X: Gdx.input.getPitch()
- Roll: Ángulo de rotación arredor do eixe Y: Gdx.input.getRoll()
Acelerómetro
Para poder utiliza o compás debemos de indicalo na clase AndroidLauncher do proxecto Android:
config.useAccelerometer=true;
No caso do acelerómetro podemos facer uso dos seguintes métodos que devolven un valor de tipo float entre -10 e 10 inclusive.
- Aceleración no eixe X: Gdx.input.getAccelerometerX()
- Aceleración no eixe Y: Gdx.input.getAccelerometerY()
- Aceleración no eixe Z: Gdx.input.getAccelerometerZ()
Exemplo de código
Deberedes de cambiar a clase co que inician as diferentes plataformas pola seguinte:
Código da clase AcelerometroCompas
Obxectivo: Amosar os valores que devolven as funcións que controlan o acelerómetro e o compás.
public class AcelerometroCompas extends ApplicationAdapter {
SpriteBatch batch;
Texture img;
BitmapFont font;
@Override
public void create () {
batch = new SpriteBatch();
img = new Texture("badlogic.jpg");
font = new BitmapFont();
}
@Override
public void render () {
Gdx.gl.glClearColor(1, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
batch.begin();
font.drawMultiLine(batch, getOrientationString(), 20, Gdx.graphics.getHeight() - 10);
font.drawMultiLine(batch, getAcelerometerString(), 120, Gdx.graphics.getHeight() - 10);
batch.end();
}
private String getOrientationString() {
StringBuilder builder = new StringBuilder();
builder.append("\nazimuth: ");
builder.append((int)Gdx.input.getAzimuth());
builder.append("\npitch: ");
builder.append((int)Gdx.input.getPitch());
builder.append("\nroll: ");
builder.append((int)Gdx.input.getRoll());
return builder.toString();
}
private String getAcelerometerString() {
StringBuilder builder = new StringBuilder();
builder.append("\nX: ");
builder.append((int)Gdx.input.getAccelerometerX());
builder.append("\nY: ");
builder.append((int)Gdx.input.getAccelerometerY());
builder.append("\nZ: ");
builder.append((int)Gdx.input.getAccelerometerZ());
return builder.toString();
}
}
TAREFA OPTATIVA A FACER
TAREFA OPTATIVA A FACER: facer que dependendo da inclinación do móbil, modificar a velocidade dos coches para que vaian máis rápido ou máis amodo.
Podedes intentar calquera outro tipo de control que queirades, como mover o alien con acelerómetro ou calquera outra forma.
-- Ángel D. Fernández González -- (2014).