3Fermer5
FadestLe 05/01/2009 à 16:25
2/3 petites choses en passant sur la gestion des collisions en hard :

points positifs :
- ça marche au pixel prêt, c'est super pour les formes alambiquées
- c'est plutôt "facile" à mettre en place (j'y reviendrais plus tard)
- ça évite d'alourdir le code

points négatifs :
- ça bouffe 8 ko de RAM (bah oui, c'est un buffer écran supplémentaire)
- ça ralentit un peu le tout (mais là, faut comparer avec un algo à la main)


Maintenant, pour ton projet en particulier, j'avais justement voulu tester le buffer de collision sur un casse-briques il y a quelques années et je n'avais pas continuer l'expérience car :
- pour les briques, il me semblait plus efficace de chainer les sprites briques pour gagner (beaucoup) de temps machine. Ce n'est pas qu'on en ait besoin de tant que ça, mais c'est assez spectaculaire de chainer les sprites (j'avais un exemple perdu depuis sur un niveau de plate forme à la Mario ou non chainé, ça ramait comme pas possible, et chainé, c'était trop rapide) pour ce genre de chose (et vachement pratique au niveau algo, on affiche le premier et la bécane se débrouille toute seule, suffit juste de positionner le flag affiché ou non sur chaque brique quand elle disparait)
- MAIS (car il y a avait un mais - et c'est là que je reviens sur les guillemets du "facile"), le buffer de collision entre la balle et les briques lorsqu'elles étaient chainée ne fonctionnait pas. Je ne sais plus par contre si j'avais fait le test avec des sprites chainés ayant la structure complète (c'est à dire ne récupérant pas une partie des infos du sprite initial, ce qui permet de gagner de la mémoire). Bref, c'est à voir...

Pour tes collisions à la main, vu que ta raquette, tes briques, et même ta balle (ou presque) sont rectangulaires, il "suffit" de tester l'intersection des 2 rectangles. Après, une fois la collision détectée, c'est plus au niveau de la gestion des rebonds qu'on commence à s'arracher les cheveux (dans quel sens repart la balle, à quelle vitesse, avec quel effet...)

Si je retrouve ce bout de code de gestion des collisions, je vais voir ce que je peux en faire.
Mais de mémoire, il faut déclarer dans le contrôleur du sprite qu'il sera géré par le buffer de collision en précisant un plan. Puis, tester si une varibale indique qu'il y a eu collision et reparcourir la liste de sprites pour voir lesquels sont en contact.