09.02.2017 Views

creez-des-applications-pour-android

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

6 Exploiter les fonctionnalités d’Android<br />

monter » et elle se met à rouler dans le sens de la pente, comme le ferait une vraie boule. De ce<br />

fait, j’ai conservé les données sur deux axes seulement : x et y.<br />

Ces données servent à modifier la vitesse de la boule. Si la boule roule dans le sens de la pente,<br />

elle prend de la vitesse et donc sa vitesse augmente avec la valeur du capteur. Si la vitesse dépasse<br />

la vitesse maximale, alors on impose la vitesse maximale comme vitesse de la boule. Enfin, si la<br />

vitesse est négative… cela veut tout simplement dire que la boule se dirige vers la gauche ou le<br />

haut, c’est normal !<br />

SensorEventListener mSensorEventListener = new SensorEventListener() {<br />

@Override<br />

public void onSensorChanged(SensorEvent event) {<br />

// La valeur sur l'axe x<br />

float x = event.values[0];<br />

// La valeur sur l'axe y<br />

float y = event.values[1];<br />

// On accélère ou décélère en fonction <strong>des</strong> valeurs données<br />

boule.xSpeed = boule.xSpeed + x;<br />

// On vérifie qu'on ne dépasse pas la vitesse maximale<br />

if(boule.xSpeed > Boule.MAX_SPEED)<br />

boule.xSpeed = Boule.MAX_SPEED ;<br />

if(boule.xSpeed < Boule.MAX_SPEED)<br />

boule.xSpeed = -Boule.MAX_SPEED ;<br />

boule.ySpeed = boule.ySpeed + y;<br />

if(boule.ySpeed > Boule.MAX_SPEED)<br />

boule.ySpeed = Boule.MAX_SPEED ;<br />

if(boule.ySpeed < Boule.MAX_SPEED)<br />

boule.ySpeed = -Boule.MAX_SPEED ;<br />

}<br />

// Puis on modifie les coordonnées en fonction de la vitesse<br />

boule.x += xSpeed;<br />

boule.y += ySpeed;<br />

@Override<br />

public void onAccuracyChanged(Sensor sensor, int accuracy) {<br />

}<br />

}<br />

Maintenant que notre boule bouge, que faire quand elle rencontre un bloc ? Comment détecter<br />

cette rencontre ? Le plus simple est encore d’utiliser <strong>des</strong> objets de type RectF, tout simplement<br />

parce qu’ils possèdent une méthode qui permet de détecter si deux RectF entrent en collision.<br />

Cette méthode est boolean intersect(RectF r) : le boolean retourné vaudra true si les<br />

deux rectangles entrent bien en collision et r sera remplacé par le rectangle formé par la collision.<br />

[[attention]] | Je le répète, le rectangle passé en attribut sera modifié par cette méthode, il vous<br />

faut donc faire une copie du rectangle dont vous souhaitez vérifier la collision, sinon il sera mo-<br />

448

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!