Bonjour,
Je cherche actuellement à développer un jeu en 2D isométrique. Je rencontre un problème pour calculer la position de la tuile sur lequel le joueur à cliqué.
J'ai bien trouvé les formules suivantes :
Pour passer d'une coordonnée isométrique aux coordonnées en pixels à l'écran:
Pour passer d'une coordonnée en pixels à l'écran à une coordonnée isométrique:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public Point convertTileCoordInScreenCoord(double tileCoordX, double tileCoordY) { Point screenCord = new Point(); screenCoord.x = (int)((tileCoordX - tileCoordY) * tilePixelWidth / 2.); screenCoord.y = (int)((tileCoordX + tileCoordY) * tilePixelHeight / 2.); return screenCord; }
Formule obtenu sur le lien suivant : http://www.developpez.net/forums/d78...s/#post4537900
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 public Point2D.Double convertScreenCoordInTileCoord(int screenCoordX, int screenCoordY) { Point2D.Double tileCord = new Point2D.Double(); tileCord .x = (screenCoordY / tilePixelHeight + screenCoordX / tilePixelWidth; tileCord .y = (screenCoordY / tilePixelHeight - screenCoordX / tilePixelWidth; return tileCord; }
Mon problème est le suivant :
J'ai un tableau à 2 dimensions d'une taille de 10 x 10.
Mon image 2D Isométrique à une taille totale de 453 x 226. Cette taille a été obtenu en partant d'un damier de 320 x 320 puis tourné a droite de 45° et réduction de la hauteur par 2.
Chaque tuile à une taille de 44 x 22 (au lieu du 32 x 32 sur mon damier 2D).
Si l'utilisateur clique sur le damier qui correspond a la position 9,3.
X.souris = 363
Y.souris = 147
En appliquant la formule ci-dessus pour passer d'une coordonnée en pixels à l'écran à une coordonnée isométrique j'obtiens :
tileCord.x = (147 / 22 + 363 / 44)
tileCord.x = 14.95
tileCord.y = (147 / 22 - 363 / 44)
tileCord.y = -1.55
J'aimerais savoir pourquoi je n'obtiens pas un tileCord.x = 9 et un tileCord.y = 3 ? Je me doute que je dois me tromper quelques parts mais je ne trouve pas où :/
Merci pour votre aide
Partager