LIBGDX Acelerometro

De MediaWiki
Ir a la navegación Ir a la búsqueda

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

LIBGDX 3 Avanzado AcelerometroCompas 2.png

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

LIBGDX 3 Avanzado AcelCompas 1.jpg

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 ao 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.

Debemos editar o arquivo AndroidManifiest.xml da versión Android:



Escribimos en Name o hardware a usar
  • <uses-feature android:name="android.hardware.sensor.accelerometer" android:required="true"></uses-feature>
  • <uses-feature android:name="android.hardware.sensor.compass" android:required="true"></uses-feature>


  • Se escollemos a opción 'required=true' 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:

1 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:

1 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.

 1 public class AcelerometroCompas extends ApplicationAdapter {
 2 	SpriteBatch batch;
 3 	Texture img;
 4 	BitmapFont font;
 5 	
 6 	@Override
 7 	public void create () {
 8 		batch = new SpriteBatch();
 9 		img = new Texture("badlogic.jpg");
10 
11 		font = new BitmapFont();
12 	}
13 
14 	@Override
15 	public void render () {
16 		Gdx.gl.glClearColor(1, 0, 0, 1);
17 		Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
18 		batch.begin();
19 		font.drawMultiLine(batch, getOrientationString(), 20, Gdx.graphics.getHeight() - 10);
20 		font.drawMultiLine(batch, getAcelerometerString(), 120, Gdx.graphics.getHeight() - 10);
21 		batch.end();
22 		
23 	}
24 	private String getOrientationString() {
25 		StringBuilder builder = new StringBuilder();		
26 		builder.append("\nazimuth: ");
27 		builder.append((int)Gdx.input.getAzimuth());
28 		builder.append("\npitch: ");
29 		builder.append((int)Gdx.input.getPitch());
30 		builder.append("\nroll: ");
31 		builder.append((int)Gdx.input.getRoll());
32 		return builder.toString();
33 	}
34 	private String getAcelerometerString() {
35 		StringBuilder builder = new StringBuilder();		
36 		builder.append("\nX: ");
37 		builder.append((int)Gdx.input.getAccelerometerX());
38 		builder.append("\nY: ");
39 		builder.append((int)Gdx.input.getAccelerometerY());
40 		builder.append("\nZ: ");
41 		builder.append((int)Gdx.input.getAccelerometerZ());
42 		return builder.toString();
43 	}
44 }


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 -- (2015).