Sensors d'inclinació i d'orientació
La gran majoria de dispositius mòbils disposen de diferents sensors que els permeten situar-se en l'espai: sensor de localització GPS, sensor d'orientació, giroscopi, podòmetre,….
En aquest bloc ens centrarem en un sensor força comú en els dispositius com és el d'orientació. Aquest sensor ens informarà de l'orientació del dispositiu en els tres eixos ,
Els valors, en funció de l’angle girat, variaran tal com segueix:
- Eix Z, Azimut (pot variar entre 0 i 360)
- Eix Y, Roll (val 90 si el dispositiu està girat 90º a l'esquerra, 0 si està horitzontal, -90 si està girat 90º a la dreta)
- Eix X Pitch (val 90 si el dispositiu està girat amb la part superior amunt, 0 si està horitzontal, -90 si està amb la part superior girada 90ª avall)
Mesurem els girs
Per familiaritzar-nos amb els girs proposem una aplicació molt senzilla que ens permetrà veure de quins sensors disposem i com varien els seus valors.
La interfície tindrà el següent aspecte:
Com veieu hi ha tres objectes no visibles que ens permetran visualitzar els moviments que fa el dispositiu.
En iniciar, l’app comprovarà si disposem d’aquests sensors:
i periòdicament usarem l’esdeveniment Timer del Clock1 per actualitzar-ne els valors:
Creem un joc: Parells o senars?
Usarem aquestes lectures per desenvolupar un joc d’encertar parells i senars. L'aplicació mostrarà un número i l’usuari l’haurà de moure, inclinant el dispositiu mòbil cap al seu lloc en funció de si és parell o senar.
El joc tindrà una interfície senzilla que mostrem tot seguit.
Comentaris sobre la interfície:
- Tan sols usarem el sensor d’orientació per controlar el joc.
- Hem creat 3 Sprite Image, dos carregats amb uns cartells que indiquen parell i senar, i un altre al qual encara no li hem carregat cap imatge.
- Tenim carregades en el programa 5 imatges corresponents a 5 números però no les hem associat encara a cap objecte.
Comencem a programar
Per començar a jugar, activarem l’spriteImage ISNumero on carregarem una imatge numèrica:
A la imatge es veu que el nom de la imatge serà aleatori entre num-1.png a num-5,png. Aquest número quedarà gravat a la variable numero per comprovar després d‘una forma fàcil si hem conduit l’ISNumero(imatge amb número) on tocava o no,
Per determinar la velocitat de l'SpriteImage utilitzarem el següent bloc de codi:
Donat que els valors de pitch i de roll indiquen la inclinació en dos eixos perpendiculars, la velocitat serà l’arrel quadrada de la suma del quadrat de cada un d’ells. 126 és el valor màxim que pot donar l’operació, i per una regla de 3 convertim aquest valor a un màxim de 50.
La direcció la determinem tal com segueix:
La variable angle ens dona un valor entre -180 i 180. Amb el codi anterior ho convertim a un valor que variarà entre 0 si inclinem el dispositiu cap a la dreta, 90 si l’inclinem tombant la part superior avall, 180 si el tombem cap a l’esquerra i 270 si n’inclinem la part inferior cap avall.
Aquesta informació es facilitarà cada 500 ms a l’SpriteImage mitjançant l’esdeveniment Clock.Timer:
Destaquem que tan sols farem cas dels sensors quan els valors que ens retornin estiguin en un rang entre -90 i 90. Sortiran fora d’aquests rangs quan inclinem el dispositiu cap avall, situació que descartem per no complicar la usabilitat de ml'aplicació.
La imatge anterior utilitza un bloc condicional especial:
Si es compleix la condició inicial, ens retorna el valor que tinguem a la primera opció del condicional, then, i en cas que no es compleixi, ens retornarà el valor de la segona opció, else.
Els objectes amb els que hem de fer xocar l’SpriteImage que mostra el número a l’atzar, detectaran el xoc i comprovant el valor de la variable numero decidiran si ha estat correcte o no.
ISSenar donarà el xoc com a correcte si el nombre carregat a l’ImageSprite ISNumero és senar i ISParell a la inversa. El valor del número carregat estarà emmagatzemat a la variable global numero.
es_parell és una funció que retornarà cert si el paràmetre que facilitem és parell, i fals altrament.