Bonjour,
Je suis actuellement sur le code d'un jeu incluant une grille 2D isométrique auto générée. Je rencontre une difficulté pour transférer des coordonnées en pixels x, y à une position de case isométrique.
Voici le code avec le quel je crée une case.
La largeur d'une case est de 24px et sa hauteur de 12px.
Ici j'obtiens un polygon, ce qui me permets de fouiller mes liste de case pour voir dans la quel se situe ma position. Le problème c'est que côté serveur je ne peux pas me permettre de chercher les cases ainsi. J'ai besoin d'une formule qui me donne directement les coordonnée x, y de la case avec une position en pixel.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 //Pos p = position X, Y de la case //width = et height sont les dimensions de ma case public Cell(Pos p) { int i1 = (p.x * width + height * (p.y % 2)), i2 = p.y * (height / 2); int pointX[] = new int[4]; int pointY[] = new int[4]; pointX[0] = i1; pointY[0] = i2; pointX[1] = i1 + height; pointY[1] = i2 + (height / 2); pointX[2] = i1; pointY[2] = i2 + height; pointX[3] = i1 - height; pointY[3] = i2 + (height / 2); polygon = new Polygon(pointX, pointY, 4); pos = p; }
J'ai un code qui me donne une approximation, je sens que je m'approche. Seulement, parfois c'est la bonne case qu'il retourne, parfois celle de droite, d'en bas ou à deux cases à côté. Et la démarcation des cases est au milieux et pas sur les bords du polygone affiché.
J'ai pas mal fouillé sur le net, ces dernières années j'y ai parfois été confronté sans pouvoir le résoudre de manière propre. Si quelqu'un à une explication sur l'approche de ma problématique ce serait parfait ! Et si quelqu'un à un lien vers une documentation ou alors est prêt à me l'expliquer ce serait vraiment fantastique !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public Pos posToIso(int x, int y) { if(y % 2 != 0) y--; if(x % 2 != 0) x--; float px = ((float) x / (float) width); float py = (float) y / ((float) height / 2);
Merci à vous !
Partager