09.02.2017 Views

creez-des-applications-pour-android

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

6.7 TP : un labyrinthe<br />

difié. Pour copier un RectF, utilisez le constructeur public RectF(RectF r).<br />

Ainsi, on va rajouter un rectangle à nos blocs et à notre boule. C’est très simple, il vous suffit de<br />

deux données : les coordonnées du point en haut à gauche (sur l’axe x et l’axe y), puis la taille du<br />

rectangle. Avec ces données, on peut très bien construire un rectangle, voyez vous-mêmes :<br />

public RectF (float left, float top, float right, float bottom)<br />

En fait, l’attribut left correspond à la coordonnée sur l’axe x du côté gauche du rectangle, top<br />

à la coordonnée sur l’axe y du plafond, right à la coordonnée sur l’axe y du côté droit et bottom<br />

à la coordonnée sur l’axe y du plancher. De ce fait, avec les données que je vous ai demandées, il<br />

suffit de faire :<br />

public RectF (float coordonnee_x, float coordonnee_y, float coordonnee_x + taille_du_re<br />

[[question]] | Mais comment faire <strong>pour</strong> la boule ? C’est un disque, pas un rectangle !<br />

Cela peut sembler bizarre, mais on n’a nullement besoin d’une représentation exacte de la boule,<br />

on peut accompagner sa représentation d’un rectangle, tout simplement parce que la majorité<br />

<strong>des</strong> collisions ne peuvent pas se faire en diagonale, uniquement sur les rebords extrêmes de la<br />

boule, comme schématisé à la figure suivante.<br />

Figure 6.9 – Emplacement <strong>des</strong> collisions<br />

Bien sûr, les collisions qui se feront sur les diagonales ne seront pas précises, mais franchement<br />

elles sont tellement rares et ce serait tellement complexe de les gérer qu’on va simplement les<br />

laisser tomber. De ce fait, il faut ajouter un RectF dans les attributs de la boule et, à chaque fois<br />

qu’elle bouge, il faut mettre à jour les coordonnées du rectangle <strong>pour</strong> qu’il englobe bien la boule<br />

et puisse ainsi détecter les collisions.<br />

6.7.2.5 Le labyrinthe<br />

C’est très simple, <strong>pour</strong> cette version simplifiée, le labyrinthe sera tout simplement une liste de<br />

blocs qui est générée au lancement de l’application. Chez moi, j’ai utilisé le labyrinthe suivant :<br />

449

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

Saved successfully!

Ooh no, something went wrong!