Un acelerómetro mide la aceleración de un dispositivo móviles Android en tres ejes y, a partir de ellos se puede deducir la inclinación u orientación de este.
La aceleración se mide en metros por segundo al cuadrado (m / s^2). Si un eje está
apuntando directamente hacia el centro de la tierra, su aceleración será más o menos 9'8 m / s^2.
Si apunta en la dirección opuesta, la aceleración será -10 m / s^2.
Los ejes en un dispositivo Android se configuran de la siguiente manera:
Los dispositivos Android tienen un término llamado orientación predeterminada, que indicará el estado por defecto de la orientación de la pantalla. Para los teléfonos, modo retrato ( portrait en inglés, es como en la imagen de arriba) es la orientación predeterminada. Para tablets, el modo de paisaje se tratará como la orientación predeterminada. Un dispositivo de orientación horizontal por defecto tiene sus ejes de rotación, de modo que los puntos del eje y hasta la parte más pequeña del dispositivo y los puntos del eje X a la derecha de la parte más ancha.
Comprobar disponibilidad del acelerómetro y orientación del dispositivo
Una vez vista la teoría del acelerómetro, veamos como comprobar si el dispositivo en el que se está ejecutando nuestra aplicación tiene acelerómetro. Para ello ejecutamos allí donde queramos comprobarlo la siguiente línea de código:
Esta función nos devolverá una variable booleana, true en caso de existir el acelerómetro, false en caso contrario.
Ahora veamos como saber la orientación actual que tiene nuestro dispositivo, para ello, ejecutamos la siguiente línea de código donde queramos conocer la orientación:
Esta función devolverá una variable de tipo int, con un valor de 0, 90, 180 o 270 grados, que indica la diferencia angular entre la orientación actual y la orientación nativa.
Ahora veamos como saber la orientación nativa de nuestro dispositivo:
Esto nos devuelve una variable de tipo Orientation con valor de Orientation.Landscape u Orientation.Portrait.
Lecturas del acelerómetro
Llegamos a la parte que nos interesa: Usar los datos que nos da el acelerómetro.
Para ello usaremos las siguientes funciones para saber el valor que devuelve:
Como hemos dicho antes en cada eje se moverá entre los valores flotantes de 10 y -10.
Para mover a un actor por la pantalla deberemos entonces, seguir los siguientes pasos:
- Multiplicar el valor obtenido al comprobar el acelerómetro en un eje determinado por un delta para adecuar la velocidad a la que queramos
- Si el delta usado es 1 se moverá a una velocidad de entre 10 y -10 cada frame.
- Si el delta usado es 0.5 se moverá a la mitad de velocidad.
- Si el delta usado es negativo se moverá en la dirección contraria a donde giremos el dispositivo móvil.
- Deberemos hacer varias pruebas y ajustar el delta a datos como el tamaño de la pantalla y la velocidad a la que queremos que avance el actor deseado.
- Aplicar el incremento (o decremento) de posición al actor que queramos mover. Para ello sumamos el valor obtenido anteriormente a la posición actual del actor en su función de actualizar (act(...)) si es un objeto de la clase Actor o de una heredada de esta.
- Dibujar de nuevo el actor para mostrar su nueva posición. Esto se hará en el método draw(...).
Con estos simples pasos podremos mover cualquier objeto por la pantalla de nuestro dispositivo en el eje que queramos (o en varios ejes a la vez).
Vibrador
El vibrador, como ya sabemos, sirve para hacer vibrar el móvil.
Para que nuestra aplicación pueda hacer vibrar el móvil, deberemos ponerle un permiso especial. Para esto nos vamos a nuestro fichero AndroidManifest.xml y añadimos la siguiente línea de permisos:
Con esto ya podremos hacer vibrar el dispositivo el tiempo que queramos con la función siguiente:
El tiempo se especificará en milisegundos.
Si queremos patrones de vibración más sofisticada usaremos la siguiente forma:
Aquí enciende el vibrador durante 200 milisegundos, y luego lo apaga durante 200
milisegundos después de nuevo lo enciende hasta dentro de 200 milisegundos. El segundo
parámetro especifica que el patrón no se debe repetir.
Notas:
- Los dispositivos que no tengan acelerómetro devolverán 0 en las funciones de obtener la aceleración en algún eje.
- Aunque no es obligatorio, es recomendable añadir a nuestro fichero AndroidManifest.xml las siguientes líneas para informar de que nuestra aplicación hará uso del acelerómetro para funcionar:
amigo, me podrías orientar un poco? aun no se por que valores debo multiplicar.
ResponderEliminary también para que sirve la librería Gdx
Hola muchas gracias me funciono, gracias otra vez, saludos desde aqui
ResponderEliminarMe alegro de que te sirviera =D
Eliminar