Briques (Super Mario Bros)


#1

Bonsoir.

Je m’amuse à cloner des jeux vidéo de mon enfance.
Je viens de réaliser un clone de Pong ( https://www.youtube.com/watch?v=E2nF1Ars9Kw&t=17s) et un clone d’Arkanoid ( https://www.youtube.com/watch?v=WNyHiJovg0U&t=7s).

Maintenant j’aimerais bien cloner Super Mario Bros.
Je suis parti d’un jeu vide et j’ai pu créer une collision avec le sol, sauter, animer ma marche.

Par contre je n’arrive pas à résoudre un problème avec les briques/points d’interrogation: je peux les frapper par le dessous mais je n’arrive pas à marcher dessus.
J’ai essayé plusieurs stratégies:

  • détection de l’angle de Mario
  • détection de la direction de Mario
  • si Mario.Y est inférieur à brique.Y (et son contraire)
  • j’ai essayé avec des variables (que je ne maîtrise pas encore à fond).

Quelle serait selon vous la stratégie à adopter? Utiliser deux objets différents peut-être, un pour le dessous et un pour le dessus?

Merci


#2

Je te conseille de mettre une hitbox sur tout le bloc (avec des physiques ou comme tu veux/fais dans le reste du jeu et d’utiliser un event “pour chaque objet” et de creer un objet de collision juste en dessous de la taille de zone que tu veux sois touchable (teste avec un sprite visible puis rends l’image transparente), et dans le meme event link chaque hitbox d’en bas avec le bloc en lui meme. Ensuite tu peux faire un truc du genre quand collision entre joueur et la hitbox du bas, prendre en compte le link d’objet et changer l’animation de bloc de 0 a 1 ou quelque chose comme ca.


#3

Je vais tenter cette approche.
Mais il n’y a pas une méthode plus rapide à mettre en place et, surtout, facile à répéter X fois ?


#4

Personnellement je trouve que c’est la méthode la plus simple et je ne vois pas en quoi c’est difficile a répéter, a moins que tu changes la taille des blocs sans arrêt.


#5

Il y a tout de même une vingtaine (voire plus de briques) et une bonne quinzaine de points d’interrogation à mettre en place et pour chaque brique il faut régler l’objet transparent pour la frappe du dessous et l’autre objet transparent pour pouvoir marcher.
Bien sûr c’est faisable mais on gagnerait beaucoup plus de temps si on pouvait attribuer à la brique elle-même deux comportements différents.


#6
  1. Pourquoi séparer les points d’interrogation des blocs?
  2. Les évents que j’ai donné tu les entre une fois ta pas besoin de refaire ça pour chaque bloc

#7

Bonjour.
J’ai voulu simplifier au maximum les choses et j’ai trouvé une solution qui semble marcher: il faut comparer la position Y de Mario par rapport à la position Y du point interrogation.
Si mario.Y() est majeur de point.Y() ça veut dire qu’il est en dessous et, après la collision, Mario est renvoyé vers le sol.
Si mario.Y() est mineur de poin.Y(), ça veut dire que Mario est dessus et donc je peux l’arrêter et le faire marcher.

Pour le moment ça fonctionne comme il faut. J’espère ne pas trouver de défauts à cette solution par la suite.

Ps:
J’ai aussi rajouté des conditions sur l’axe X pour éviter que Mario ne reste pas collé au bloc.