3Fermer5
GoldenCrystalLe 11/11/2009 à 15:05
./1 > Un premier truc à voir: Est-ce que tu as des objets solides pour lesquels ton perso pourrait en 1 frame passer d'un côté à l'autre, sans qu'une détection de collision grossière ne s'en aperçoive ? (genre des ennemis ou je ne sais quoi)
Sinon la solution à tout est de discrétiser... Je veux dire... discrétise ta discrétisation (Mathématiquement: en considérant la fonction sur intervalle continu obtenue par interpolation de ta fonction discrétisée tongue)
Pour le reste c'est à peu de choses près le même principe que l'algo de bresenham. Disons que tu dois mentalement (enfin plutôt virtuellement, en l'occurence) tracer une droite de ton point d'origine à ton point de destination idéal. A chaque pixel mental tu testes les collisions de manière précise.
Ça c'est la manière 100% générique la plus basique et la plus fiable, mais selon les contraintes exactes du problème tu peux pas mal simplifier la discrétisation et/ou l'algorithme du problème.
Déjà, si tu peux appliquer l'algorithme de collision grossier (i.e. faire avancer entièrement; tester collision) et que tous tes blocs sont complètement carrés tu peux t'en tirer relativement simplement. En gros déterminer quelle direction x ou y a touché l'élément en premier, l'ajuster, et calculer l'autre (ça bouffera quelques cycles cela dit) pour que les deux d'accordent.
Tu dois également pouvoir faire un truc assez bourrin avec des tables pré-calculées si tu connais de manière assez précise l'encadrement des différents mouvement possibles.

(Oui et cross pendant que j'écrivais j'ai pas encore lu les posts tongue)