Je travaille sur un jeu basé sur une grille isométrique et je rencontre un problème en essayant de lier un clic de souris de l'utilisateur à une tuile. J'ai pu diviser le problème en 2 parties:
- Trouver un rectangle qui entoure une tuile (ce que j'ai pu faire)
- Déterminer à partir du rectangle sur lequel le cliquet a atterri
Voici un exemple de rectangle avec des tuiles à l'intérieur:
Le rectangle mesure 70 pixels de long et 30 pixels de haut, donc si j'utilise une entrée disons 30x (haut) / 20y (gauche), comment pourrais-je déterminer la tuile dans laquelle il est tombé?
Réponses:
Pour chaque étape que vous effectuez dans la direction x, vous vous déplacerez de 35 pixels vers la gauche et de -15 pixels vers votre toile;
Pour chaque étape que vous effectuez dans la direction y, vous vous déplacerez de -35 px à gauche et de -15 px jusqu'à votre toile;
Cela signifie que vous pouvez convertir facilement votre système de coordonnées en pixels:
(x, y) => (35 · x, -15 · x) + (-35 · y, -15 · y) = (35 · x - 35 · y, -15 · x - 15 · y) = ( Xpx, Ypx)
Vous devez résoudre le problème inverse que vous connaissez Xpx et Ypx et que vous voulez connaître x et y (en coordonnées de mosaïque).
Xpx = 35 · x - 35 · y;
Ypx = -15 · x - 15 · y;
pouvez-vous résoudre ce problème?
x = 1/70 · Xpx - 1/30 · Ypx
y = -1 / 70 · Xpx - 1/30 · Ypx
Évidemment, vous aurez des valeurs non entières dans le cas général: prendre le plafond de x et y vous donnera les coordonnées de la tuile entière.
la source