Je vérifie la collision pour un personnage de plateforme comme indiqué dans # 1. Les points rouges sont les pixels qui sont vérifiés et les lignes grises indiquent les axes auxquels ils se rapportent. J'aime les résultats que j'obtiens en vérifiant la collision de cette façon (contre, disons, la boîte englobante). Tout fonctionne exactement comme je le voudrais, sauf un problème: la détection d'écrasement.
Dans les images suivantes, la boîte bleu clair représente le sol, la boîte orange est un objet et les flèches indiquent la direction du mouvement.
La solution simple pour détecter le moment où le joueur est écrasé est de voir si les points de collision des côtés opposés se déclenchent tous les deux. S'ils le sont, le joueur est écrasé. Dans # 2, vous pouvez voir un scénario d'écrasement normal. Le joueur est mis à la terre et les points de collision supérieurs se croisent avec l'objet qui tombe. Cela déclenche un écrasement.
Les numéros 3, 4 et 5 présentent des scénarios problématiques. Dans # 3, le joueur se déplace vers l'objet, qui se déplace vers le haut. Un point de collision du côté droit frappe l'objet, provoquant une collision et arrêtant le joueur.
Maintenant, si l'objet continue de monter et que le joueur continue de se déplacer vers la droite (comme illustré dans le # 4), l'objet efface le point de collision du côté droit du joueur et le joueur se déplace vers la droite. Mais maintenant, après l'avoir fait, l'objet coupe un point de collision supérieur provoquant un écrasement vertical indésirable.
Un scénario similaire est illustré au # 5. Deux objets sont suffisamment éloignés l'un de l'autre pour que les points de collision inférieurs se dégagent, permettant au joueur de tomber, mais pas jusqu'à permettre aux points de collision latéraux de se dégager, provoquant un écrasement horizontal indésirable.
J'ai creusé la tête sur une solution, mais rien de ce que j'ai trouvé n'a particulièrement bien fonctionné, alors je me demande si quelqu'un a une idée ou un aperçu de la façon de résoudre ces problèmes.
Pour dissiper une certaine confusion, les points de collision rouges se trouveraient dans le sprite et les lignes grises n'étaient utilisées que pour désigner l'axe correspondant à chaque point de collision. Par exemple, si le sprite du personnage était un simple carré vert, les points de collion ressembleraient à ceci: