Je m’amuse à cloner des jeux vidéo de mon enfance.
Je viens de réaliser un clone de Pong ( - YouTube) et un clone d’Arkanoid ( - YouTube).
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?
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.
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.
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.
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.