LIBGDX Acelerometro

De MediaWiki
Saltar a: navegación, buscar

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