C'est écrit en quel langage?
Comment ça, quel langage ?
Je n'ai rien écrit du tout, moi !
Si tu parles de la matrice avec dedans l'angle du terrain au niveau de ce pixel, c'était juste une idée qui m'est venue lors de la rédaction du post.
Tu parlais de nombres complexes, tu utilises réellement un type 'complex' dans tes progs? 
En TI-Basic sur 92+, oui, ça me permet de concaténer deux matrices de réels en une seule (puisque C et R² sont bijectifs).
Mais sinon, dans un langage de programmation normal, c'est vrai que ça ne se fait pas.
Sinon je n'ai pas trop compris comment tu t'y prends dans ce cas-là pour reperer sur quel type de pente se trouve le perso?
Pour le pixel qui se trouve à la 'verticale locale' (c'est-à-dire dans la direction de la normale au terrain) du centre de masse de Sonic, l'élément de matrice correspondant contient la valeur numérique de l'angle de la pente du terrain au niveau de ce pixel précis.
Plus exactement, afin d'avoir une convention de signe (nécessaire pour les tiles ayant la tête en bas comme les sommets de looping), ce sera l'angle entre
ey (vecteur unitaire vertical ascendant pour l'écran) et la normale au terrain dirigée du côté terre vers le côté air.
Par exemple, cet angle vaut :
- pour un sol plat -> 0
- pour un plafond ou un sommet de lopping -> pi (ou -pi, c'est pareil)
- pour un mur vertical dont le côté gauche est à l'air libre -> pi/2
Donc selon le pixel 'au-dessus' (entre guillemets, puisque c'est la verticale locale attachée au terain) duquel se trouve Sonic, un simple cosinus lui donne la direction de sa vitesse dans le référentiel absolu (O;
x;
y) attaché à l'écran.
Après, je n'ai pas poussé très loin la réflexion, puisque comme je l'ai dit, c'est une idée qui m'est venue comme ça en cours de rédaction.
Cependant, je pense que ça pourrait faciliter les calculs.
En effet, dans les méthodes classiques pour lesquelles l'écran est représenté par une matrice (ou plutôt une juxtaposition de matrices-tiles) ne contenant que des 0 et des 1, il faut regarder tous les pixels à proximité de Sonic (
cf. méthode décrite par Brunni), alors que là, la lecture d'une seule valeur dans la matrice suffit !
Par contre, évidemment, lorsque tu écris la matrice correspondant au tile, c'est plus dur que de mettre simplement des 0 et des 1, tu est obligé de faire du pré-traitement, mais tout le temps que tu perds lors de la création du programme sera gagné lors de l'exécution.
Même en Assembleur (je dis 'même', mais je ne fais que de l'Assembleur ...), je fais toujours des prétraitements de folie, comme dans un programme d'il y a quelques temps où il m'a fallu 3 mois pour calculer, entrer sans erreur et vérifier de deux manières différentes 896 valeurs pour que le programme n'ait pas à les calculer à chaque tour de boucle (en plus, chaque valeur dépend des précédentes, donc une erreur, et c'est toute la suite qui est fausse ...).
Si tu as encore besoin d'aide en méca (comme développer plus avant ce que j'ai raconté), n'hésite pas à demander !
@++