Comment peux-tu comparer une force et une vitesse ???
Heu je ne les compare pas, mais il y a quand-même un rapport (F=m*g).
Oui je sais c'est bizarre. Mais j'essaie de lui expliquer simplement (même si ce n'est pas vraiment correct, c'est comme ça qu'il va devoir faire dans son jeu, et non comme tu le dis, pour les raisons de puissance de calcul sus-citées).
Sinon j'ai l'impression de m'être mal exprimé pour les collisions en haut. Je retente donc une explication plus simple. Ca pourra servir aux débutants qui passent dans ce topic.
Imagine que tu as ton personnage, sa position est x=34, y=20. Ses dimensions sont l=32, h=40. Chaque tile fait 16x16 pixels.
Il va falloir tester les collisions dans tous les sens. Mais d'abord il faut commencer par le bas. Dans ce cas-là, on va tester sur toute la largeur du sprite, c'est-à-dire aux positions x, x+16 et x+32 (il y aura trois passes, une boucle for) soit 34, 50 et 64. Pour la position y, on va prendre celle de ses pieds, qui se trouvent en-dessous de lui. Donc y+h, soit ici 60.
Voilà les coordonnées de notre premier point de collision: 34, 60. Pour trouver l'équivalent dans ton tableau, ce n'est pas compliqué: x/16, y/16 ([u]/![/u] divisions entières). Imaginons que dans la case correspondante (2,3) se trouve la valeur 1, indiquant un mur.
On sait maintenant qu'il y a une collision (en bas) et il va falloir "monter" les pieds du personnage de manière à ce que celui-ci se trouve dessus la plate-forme. On va donc tout simplement arrondir ces coordonnées. On connait aussi la position de la tile! C'est 2*16,3*16 soit 32,48. Donc pour donner l'impression que les pieds de Sonic se trouvent dessus la tile, ils devront se trouver à la position y=48. Il suffit donc de soustraire la hauteur (puisque c'est ses pieds qui iront là) et on a la nouvelle position en y du personnage: 8! X reste inchangé dans cette partie du code.
Maintenant pour les plate-formes inclinées, ce n'est pas beaucoup plus compliqué en fait. Revenons au point de départ; on connaît notre point de collision: 34,60. Imaginons maintenant qu'on a à cet endroit une plate-forme inclinée (45°) définie comme suit:
{0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
La position en X de la tile est 2*16=32. Donc le point de collision a un offset (décalage) en X valant 2. On trouve dans notre tableau la valeur correspondante: 2. Grâce à cette table, on voit que la position idéale des pieds ne serait pas 48 (3*16) comme dans le cas précédent, mais 48+2=50. Il suffit maintenant de calculer de manière à ce que les pieds se trouvent à la position 50. Ce n'est pas plus compliqué que ça. On trouve donc les coordonnées 50-40=10, et c'est bien deux pixels plus bas que la plate-forme de type dur (fixe)...
[Edit] Mega-cross post. J'ai l'air con avec mon explication à deux balles. Enfin comme je l'ai dit ça pourra servir aux débutants qui passeraient dans ce topic
