Traitement des collisions, seconde partie

Ce sujet traite du calcul des collisions entre objets dans notre casse briques, plus précisément de la mise en place du calcul et du traitement des collisions pour les objets de notre jeu. Vous pouvez commencer à partir de votre solution aux précédents TPs et Apnées, ou partir de l'état global Etape8.zip. Récupérez ensuite le fichiers pour ce TP dans l'archive Collisions.zip.

1 - Composants percutables

Nous allons maintenant doter nos composants de la capacité de recevoir un choc et de percuter les autres composants. Java ne supportant pas l'héritage multiple, nous matérialiserons ces caractéristiques via l'interface ComposantPercutable. Dans cette interface nous trouvons :

Remarquons que notre DecorateurDeComposant écrits aux précédents TPs doit devenir un DecorateurDeComposantPercutable afin de permettre aux composants décorés de fournir les nouvelles méthodes décrites ci-dessus.

2 - Objets percutants

Le calcul de collisions se fera à l'initiative des composants qui se déplacent. En effet, les objets immobiles ne risquent pas trop de se percuter entre eux... Le Moteur écrit précédemment n'étant pas un DecorateurDeComposantPercutable, il ne pourra plus décorer nos nouveaux composants. Nous allons donc le remplacer par un ObjetPercutable qui reprend les fonctionnalités du Moteur par délégation. Le coeur du calcul de collisions va provenir des composants mouvants que sont les Balles et la Raquette. Il seront décorés par un ObjetPercutant, qui est un peu plus qu'un ObjetPercutable : lors de la mise à jour, après avoir déplacé le composant, il va demander au niveau de calculer toutes les collisions entre le composant décoré et les autres composants de la scène.

3 - Niveaux avec collisions

Le NiveauAvecCollisions crée les décorateurs appropriés autour des objets mouvants de la scène et fournit une méthode de calcul des collisions, traiteCollisions. Cette méthode, étant donné un ObjetPercutant, le marteau, va parcourir chacun des autres composants de la scène. Pour chaque composant parcouru, que nous nommerons enclume, si les boites englobantes du marteau et de l'enclume se recoupent, alors un calcul de collisions plus précis est fait. L'enclume accepte ensuite le marteau comme visiteur afin que celui-ci puis répercuter l'effet de la collisions sur les composants.

4 - Exercice

Ecrivez les classe manquantes : BallePercutable, BriquePercutable, BonusPercutable et RaquettePercutable. Elle devront toutes être munies d'une boite de collisions, implémenter l'interface ComposantPercutable et pouvoir être clonées correctement (pour la fabrication du niveau via la copie d'un modèle). En outre :

Une fois les 4 classe écrites, votre balle devrait enfin rebondir sur tout ce qu'elle touche.