Sunteți pe pagina 1din 6

PARTE 5

SENSORES
En este mdulo vamos a explorar los sensores, es decir, unos componentes electrnicos de
nuestro dispositivo mvil que miden distintas cosas. Entre los sensores del celular, vamos
a centrarnos en el acelermetro que nos permite conocer la inclinacin del dispositivo. Y
nada mejor para explorar el acelermetro que desarrollar una app de un juego.
5.1 Sensores /
REPRESENTAR DATOS DE ACELERACIN
Para empezar nuestra app vamos a aprender a acceder a los datos Al poner en marcha la aplicacin en el dispositivo, comprobamos
de aceleracin proporcionados por el acelermetro. Partimos que el valor de x tiene que ver con la inclinacin a izquierda
de una plantilla HTML vaca donde ponemos 3 cajas (div) para (positivo) y derecha (negativo). Respecto a la y, el valor tiene
representar las lecturas del acelermetro. En el CSS colocamos las que ver con la inclinacin del terminal hacia delante (negativo)
cajas centradas usando un margen auto a izquierda y derecha. o hacia abajo (positivo). El eje z es espacial y empieza en 9 que
es el valor de la fuerza de la gravedad y las variaciones de este
En el JavaScript accedemos al plugin de Cordova que nos permite parmetro son pequeas al mover el terminal arriba y abajo en el
acceder al acelermetro, llamado device motion1. Para ello, primero mismo eje.
escuchamos el evento deviceready que nos avisa de cundo
podemos acceder con garantas al acelermetro. Sobre el objeto Finalmente, podemos observar que si agitamos el dispositivo los
navigator.accelerometer que nos provee el plugin de valores de aceleracin pasan de 10. Desde nuestro JavaScript
Cordova ejecutamos la funcin watchAcceleration para leer el podemos detectar la agitacin con ese umbral y, por ejemplo,
valor de la aceleracin cada cierto tiempo. Si hay xito en la lectura pintar el fondo de la app de un color diferente. En el prximo paso
se invocar una funcin de xito y si no, una de error, que son los usaremos estos valores de aceleracin como entrada de datos
dos primeros parmetros. El tercero ser la frecuencia de refresco para el juego.
en milisegundos.

A la funcin de xito (onSuccess) Cordova le pasa como (1) Cordova plugin device motion ttps://cordova.apache.org/
h
docs/en/latest/reference/cordova-plugin-device-motion
parmetro los datos de aceleracin. Simplemente representamos
en el div correspondiente del HTML el valor recogido de (2) Funcin de redondeo Math.round ttps://developer.mo-
h
la aceleracin en los ejes x, y, z. Antes de representarlo, zilla.org/es/docs/Web/JavaScript/Referencia/Objetos_globa-
les/Math/round
redondeamos el nmero a 2 decimales2.
5.2 Sensores /
CREANDO UN JUEGO CON PHASER

Para crear nuestro juego con el Tambin medimos el alto y ancho de la pantalla para hacer un
acelermetro usaremos Phaser3, juego que ocupe todo el ancho de la pantalla. En el inicio tambin
una librera para crear juegos en llamaremos a la funcin que vigila la agitacin de los sensores que
JavaScript. Nos proporciona muchas al comienzo tiene una frecuencia de muestreo de los datos del
funcionalidades, pero de momento acelermetro de un segundo pero que bajaremos ms adelante
usaremos el ciclo del juego, el para mejorar la jugabilidad.
motor de fsica para que una bolita
se mueva con el acelermetro y la Por otro lado, veamos cmo controlamos con Phaser el ciclo del
tcnica de deteccin de lmites para juego. De momento vamos a usar 2 estados:
saber cuando se est saliendo de la pantalla.
Preload: para preparar datos antes de juego. Nosotros vamos
Para usar Phaser en nuestra app, enlazamos la librera JavaScript a pintar el color de fondo del juego y a cargar la imagen de la
desde el HTML y mejor si usamos la versin minificada (como bolita.
hemos visto con otras libreras). Necesitamos tambin una imagen
para la bola (en un juego se suele llamar sprite a esta imagen que Create: prepara el inicio del juego. Nosotros pintamos la bolita en
movemos por la pantalla) que ponemos en una carpeta assets. una posicin aleatoria de la pantalla calculando con su tamao
que no se pinte fuera.
En nuestro fichero de JavaScript vamos a indicar el tamao de
la imagen de la bolita para calcular dnde la hacemos aparecer. Con toda esta informacin (tamao de pantalla, id del elemento
HTML donde se pinta el juego y estados) ya podemos arrancar
(3) Phaser https://phaser.io nuestra primera versin de juego que slo pintar la bolita en
5.2 Sensores / CREANDO UN JUEGO CON PHASER

una posicin aleatoria de la pantalla. Ahora vamos a aadir una puntuacin al juego, que depende de si
tocamos con la bolita en los bordes de la pantalla. Para sto hemos
Continuamos con el juego, esta vez agregando nuevas hecho modificaciones en el ciclo del juego:
funcionalidades al ciclo de juego:
Create: creamos un elemento scoreText que posicionamos
Preload: adems de lo anterior, tambin arrancamos el motor de en la pantalla para mostrar la puntuacin, y depende de una
fsica de Phaser, en modo ARCADE. variable puntuacin. Sobre el sprite de la bolita indicamos a
Phaser que detecte colisiones con los bordes de la pantalla
Create: aadimos que el motor de fsica acte sobre la bola. (collideWorldBounds). Y cuando suceda este evento de
colisin con el borde (onWorldBounds) ejecutamos una funcin
Update: se actualiza cada cierto tiempo para mover cosas del manejadora para decrementar la puntuacin en el scoreText .
juego. En este caso, tomamos los datos ledos del acelermetro
y se los aplicamos alsprite de la bola. En el caso de la posicin x Al probar el juego en el terminal, vemos que la bolita se mueve y
e y usamos un factor multiplicador sobre la velocidad de 300 de al chocar contralos bordes de la pantalla ya no se sale pero s se
forma emprica para que funcione con fluidez. Adems, para la x decrementa la puntuacin. Adems, la bolita se dibuja encima del
incluimos un factor negativo porque es contrario al sentido de la texto (puntuacin del juego) ya que en Phaser aparece encima lo
aceleracin que leemos del acelermetro. que se pinta ms tarde. De momento tenemos un juego simpln
con escasa jugabilidad, pero vamos a mejorarlo en la siguiente
Los datos del acelermetro los vamos actualizando en variables parte.
x e y cuando tiene xito la lectura del acelermetro. La frecuencia
de lectura de datos del acelermetro la hemos bajado a 10
milisegundos para manejar la bolita con fluidez.
5.3 Sensores /
MEJORANDO LA JUGABILIDAD

En primer lugar, hemos implementado una forma de reiniciar Update: con el motor de fsicas de Phaser detectamos la colisin
el juego cuando se agita el terminal. Cuando accedemos a de la bolita con el objetivo, y cuando sucede se llama a la funcin
acelermetro y detectamos agitacin, se ejecuta una funcin de incrementaPuntuacion. Esta funcin modifica la puntuacin
recomienzo que recarga la pgina y por tanto reinicia el juego. No en el scoreText de la pantalla.
lo hacemos inmediatamente sino despus de un tiempo, usando
la funcin setTimeout de Javascript que nos permite ejecutar una Al probar el juego en el terminal comprobamos que es muy poco
funcin pasado un tiempo en milisegundos. jugable ya que puedo posicionarme sobre el objetivo de forma
constante. Necesitamos mejorar la jugabilidad para completar
Para mejorar la jugabilidad, vamos a usar un nuevo sprite para nuestro juego. Para esto aadimos un factor de dificultad, que
dibujar un objetivo al que alcanzar con la bolita para subir nuestra en el update del ciclo de juego vamos a usar para aplicarlo sobre
puntuacin. Para conseguirlo hemos modificado el ciclo del juego: la velocidad de la bola en el eje x e y. En incrementa puntuacin,
adems de mostrar la nueva en pantalla, volvemos a repintar el
Preload: aadimos la precarga de una nueva imagen, que objetivo en una nueva posicin de la pantalla y aumentamos el
previamente hemos almacenado en la carpeta assets. nivel de dificultad (slo si estamos en puntuacin positiva).

Create: creamos un nuevo sprite para el objetivo, y lo colocamos


en una posicin aleatoria de la pantalla. Adems, sobre este
nuevo sprite tambin aplicamos las leyes de la fsica ARCADE.

S-ar putea să vă placă și