====== J'attrape la balle de tennis ====== Pour **ramasser** la balle, il suffit de la faire **disparaître** dès que mon **personnage se trouve** sur la balle : * en **cachant** la balle * ou en la **déplaçant** à un autre endroit du terrain. Voici les instructions que je peux utiliser : ^Pour^instruction^ |faire afficher une information dans la console \\ Variables|{{ :icn:labo_03.png?nolink |}}| |cacher un objet \\ UI controls|{{ :icn:tennis_03.png?nolink |}}| |déplacer un objet \\ UI controls|{{ :icn:tennis_05.png?nolink |}}| ===== Position et largeur de mon personnage et de la balle ===== {{:icn:sketchup:zoommolette.png?nolink&100 |}} Utilise la **molette** de la souris et la touche **CTRL** pour faire un Zoom avant ou un** Zoom arrière** afin de bien voir le tutoriel. {{ :icn:tennis_detection.swf?840x520 |}} ===== Détecter que mon personnage attrape la balle ===== Pour **détecter** que mon personnage est sur la balle, j'utilise **l'algorithme** suivant en considérant que mon personnage et ma balle sont des rectangles : * mon personnage à la position** x1 et y1** avec la largeur **L1 et la hauteur H1**, * ma balle à la position **x2 et y2** avec la largeur **L2 et la hauteur H2**. si (x1 < x2 + L2 ET x1 + L1 > x2 ET y1 < y2 + H2 ET y1 + H1 > y2) alors il y a collision et je cache ma balle ! fin si ==== Explication ==== {{ :icn:tennis_detection2.swf?840x520 |}} ==== Mon code ==== J'ajoute une condition pour cacher ma balle : {{ :icn:tennis_collision_12.png?nolink&200 |}} Il est difficile d'écrire une condition complexe. J'utilise aors le mode texte : {{ :icn:tennis_collision_13.png?nolink&200 |}} Et je saisis le code suivant : if (getXPosition("image_personnage") < (getXPosition("image_balle") + 50) && (getXPosition("image_personnage") + 100) > getXPosition("image_balle") && getYPosition("image_personnage") < (getYPosition("image_balle") + 50) && (getYPosition("image_personnage") + 100) > getYPosition("image_balle")) { hideElement("image_balle"); } Ce qui donne en affichant les blocs : {{ :icn:tennis_collision_14.png?nolink |}} ===== Faire apparaître la balle à un autre endroit ===== Au lieu de faire cacher la balle dès qu'elle est ramassée, je l'a fait **apparaître** à un autre endroit au **hasard**. Pour faire placer la balle à un autre endroit j'utilise l'instruction **setPosition()** : {{ :icn:tennis_collision_15.png?nolink |}} Pour obtenir un placement au **hasard** j'utilise l'instruction **randomNumber()** : {{ :icn:tennis_collision_16.png?nolink |}} * la valeur de x de 0 à 320 - 50 (largeur de l'écran - la largeur de l'image), * la valeur de y de 0 à 450 - 50 (hauteur de l'écran - la hauteur de l'image), * je précise la largeur (50) et la hauteur (50) de l'image de la balle. ===== Gérer un score ===== Comme il est maintenant possible de déplacer la balle dans ton application, comptabilise combien de fois elle est ramassée : * ajoute une étiquette pour afficher le nombre de balles ramassées. ==== Retour à l'activité : mon programme Tennis==== * [[:icn:codetennis|Activité Code.org : mon programme Tennis]]