Actuellement, j'ai un jeu de plateforme avec des tuiles pour le terrain (graphiques empruntés à Cave Story). Le jeu est écrit à partir de zéro en utilisant XNA, donc je n'utilise pas un moteur existant ou un moteur physique.
Les collisions de carreaux sont décrites à peu près exactement comme décrit dans cette réponse (avec SAT simple pour les rectangles et les cercles), et tout fonctionne bien.
Sauf lorsque le joueur rencontre un mur en tombant / sautant. Dans ce cas, ils attraperont une tuile et commenceront à penser qu'ils ont touché un plancher ou un plafond qui n'est pas réellement là.
Dans cette capture d'écran, le joueur se déplace vers la droite et tombe vers le bas. Ainsi, après le mouvement, les collisions sont vérifiées - et d'abord, il s'avère que le personnage du joueur entre en collision avec la tuile 3e du sol et est poussé vers le haut. Deuxièmement, il s'est avéré entrer en collision avec la tuile à côté de lui et poussé sur le côté - le résultat final étant que le personnage du joueur pense qu'il est au sol et ne tombe pas, et `` attrape '' la tuile aussi longtemps qu'il s'y heurte. .
Je pourrais résoudre ce problème en définissant les carreaux de haut en bas à la place, ce qui le fait tomber en douceur, mais le cas inverse se produit et il heurte un plafond qui n'est pas là en sautant vers le haut contre le mur.
Comment dois-je aborder la résolution de ce problème, afin que le personnage du joueur puisse simplement tomber le long du mur comme il se doit?