-
detection collisions 2D
bonjour à tous,
j'ai pour but de créer un petit jeu 2d style mario en java, j'ai plusieurs idées en têtes et la structure globale des classes est pas mal avancée cependant plusieurs problèmes se posent :
mes différents éléments sont des rectangles, donc la collision simple (retour d'un booléen) est assez simple mais mon idée serait de savoir d'où vient la collision (d'en haut, gauche, droite..) par exemple une collision avec un ennemi :
si "mario" touche un ennemi sur les cotés, il perd de la vie, s'il touche l'ennemi du haut, l'ennemi meurt et disparait.
donc une fois la détection et la direction de la collision établie, comment mettre en place le code pour changer les états des éléments (vie de mario en moins, ennemi mort, bonus récupéré...)
aussi concernant les déplacements, s'il y a 2 directions (haut + saut par exemple) et que "mario se tape la tête" sur un élément de décor, comment le faire arrêter de sauter tout en avançant quand même??
en espérant avoir été à peu près clair... ;)
-
Salut,
Code:
donc une fois la détection et la direction de la collision établie, comment mettre en place le code pour changer les états des éléments (vie de mario en moins, ennemi mort, bonus récupéré...)
Ce sont de vastes questions que tu poses ! Je pense qu'il faut une bonne analyse (uml) avant de se lancer dans ce genre de projet. Je suppose qu'il y aura une classe Mario (qui etendra une classe sprite) avec en attribut un nombre de vie, pour les ennemis pkoi ne pas creer une classe de gestion des ennemis qui geres une collection de différents types d'ennemis, idems pour les bonus...
Code:
aussi concernant les déplacements, s'il y a 2 directions (haut + saut par exemple) et que "mario se tape la tête" sur un élément de décor, comment le faire arrêter de sauter tout en avançant quand même??
Pour cela la classe mario doit avoir deux variables x, y pour les déplacements, il suffira de mettre y a 0 et de laisser x a sa vitesse de déplacement. x et y seront ensuite utilisé pour calculer la prochaine image afin de déplacer le joueur.
-
1 pièce(s) jointe(s)
re,
j'ai lu quelque peu des bouquins/tutos sur les designs patterns donc pas beaucoup d'héritage mais de la composition, genre la classe "mario" qui implémente "Sprite", possède un objet "Behavior" qui spécifie de combien de pixel il se déplace pour chaque unité de temps (j'ai pas décidé encore la base de temps utilisée, 20, 50, 100ms...) et aussi la hauteur du saut, le type d'attaque (par contre ça je ne sais pas comment mettre ça en place correctement)
je précise qu'une première version de ce jeu avait été faite en projet d'étude mais les design patterns n'avaient pas été vu (l'interface et le "model" étaient mélangés :mouarf: ) et le projet avait été fait à 3 donc moins pratique.
là je veux repartir de zéro pour avoir du code réutilisable à l'avenir, notamment le gestionnaire de collision.
maintenant concernant d'où vient la collision, j'ai trouvé (si 1 seule direction) : à un instant T0, 2 Sprites ne sont pas en collision, puis Sprite1 se déplace et rentre en collision avec Sprite2 (qui n'a pas bougé), donc il y a juste à regarder la direction (vecteur) prise par Sprite1.
s'il y a 2 directions (GAUCHE + HAUT), je pars d'un des coins du Sprite déplacé (cf. pj) et je regarde quel bord est touché. mais traduire ça en code je vois pas trop pour l'instant.:cry:
-