Bonjour à tous,
Dans le but de créer un petit jeu par la suite, je me suis lancé dans la création d'un moteur de rendu isométrique (basé sur opengl).
Mes maps sont stockées dans des tableaux à 2 dimensions, chaque case corresponde à un "tile" (carré de la map un fois dessinée).
A l'heure actuelle j'arrive à les dessiner de cette façon là :
Le problème est que l'ordre d'affichage n'est pas respecté, il devrait être :
En observant les coordonnées des cases dans l'ordre on a pour (x;y) :
A : (0;0)
B : (1;0)
C : (0;1)
D : (2;0)
E : (1;1)
F : (0;2)
G : (3;0)
H : (2;1)
I : (1;2)
J : (0;3)
On remarque que :
X : 0 - 1,0 - 2,1,0 - 3,2,1,0
Y : 0 - 0,1 - 0,1,2 - 0,1,2,3
Et ainsi de suite, jusqu'à la moitié de la map.
Donc en résumé je n'arrive pas pondre l'algo permettant de faire cela, les boucles quoi !
Ca serait fantastique si quelqu'un aurait un lien à me passer où mon problème est expliqué ! Ou un grand fou capable de m'expliquer lui même
EDIT :
J'ai oublié de préciser que j'utilise pour l'instant une solution qui fonctionne, mais qui n'est pas performante :
1, je charge la map
2, je récupère (x+y*largeur map) pour chaque case dans une liste (indice de profondeur)
3, je récupère une liste de Point(X,Y)(X,Y sont les coordnonnées calculé oû devront être dessiné les cases) de façon à ce que une case à l'indice "i" de la première liste corresponde à la 2ème.
4, je tri la première liste (tri bulle simple) à chaque inversement de valeur, j'inverse la même chose dans la 2ème liste, dans le but que ma 2ème liste soit trié selon les valeurs de la 1ère !
A priori, cette technique à l'air plutôt performante (un seul appel au chargement de la map) mais dés qu'une case de la map bouge, il faut tout re-trier ! Exemple, j'ai une case "joueur", quand je le déplace, je doit effectuerles mêmes opérations (qui sont assez coûteuse) qu'au chargement de la map.
Partager