Forum de la communauté SFML

Aide => Général => Discussion démarrée par: skarwild le Mai 01, 2014, 10:21:09 am

Titre: Conversion coordonnées
Posté par: skarwild le Mai 01, 2014, 10:21:09 am
Bonjour
Je créés un petit jeu isométrique et je n'arrive pas à calculer le numéro de la tuile (ex i = 0 , j =2 )   des objets à partir de leur position à l'écran.
J'ai cette formule pour récupérer leur position à l'écran :
      int x = (j * tile_width / 2) + (i * tile_width / 2);
      int y = (i * tile_height / 2) - (j * tile_height / 2);
mais je sèche pour la formule inverse.
Cordialement
Titre: Re : Conversion coordonnées
Posté par: Erwsaym le Mai 01, 2014, 12:00:50 pm
Bonjour !

Bon donc apparemment de se que j'ai compris, tu as une tuile sur ton écran avec une id composé de deux nombres i et j et tu aimerais récupéré ces données à partir de la position de cette tuile à l’écran ?
C'est assez étrange à comprendre ^^", bien que je ne comprend pas bien comment ça fonctionne pourquoi ne pas éventuellement sauvegarder dans un tableau l'id de ce tile dans un tableau représentant la map ?
Titre: Re : Conversion coordonnées
Posté par: skarwild le Mai 01, 2014, 12:06:59 pm
En fait j'ai une matrice de tuile et donc chaque tuile a un unique couple de i et j. Je peux calculer leur position à l'écran avec la formule que j'ai mis plus haut. Mon problème c'est lorsque je clique , à partir des coordonées de la souris récupérer la tuile.
Titre: Re : Conversion coordonnées
Posté par: Erwsaym le Mai 01, 2014, 12:32:16 pm
Ah ok je vois !

Pareil pourquoi pas faire simple en sauvegardant dans un autre conteneur chaque cases de ta map, je m'explique :
Tu y met grâce à ta formule précédente chaque couple i et j de ton tile, en suivant l'ordre de l'axe.
Ensuite tu peux récupérer ces id grâce aux coordonnées de la souris, tu calculs sur quelle case elle se trouve : "coordXcase = xSouris / tailleCaseWidth" par exemple, tu fais de la même façon pour l'axe y et tu pourras ensuite aller chercher dans ton conteneur "monConteneur[coordYcase][coordXcase]" par exemple.

C'est une solution je pense, j'attend ton avis la dessus !
Titre: Re : Conversion coordonnées
Posté par: kimci86 le Mai 01, 2014, 01:03:02 pm
Bonjour,

Plus simplement, on peut inverser le système d'équations:
x = w / 2 * (i + j)
y = h / 2 * (i - j)

Comme w et h sont non nuls, on peut diviser par w et h:
x / w = (i + j) /2
y / h = (i - j) / 2

En formant la somme et la différence de ces quantités:
i = x / w + y / h
j = x / w - y / h

Voilà.
Titre: Re : Conversion coordonnées
Posté par: Develog le Mai 01, 2014, 02:25:05 pm
Voici un lien qui pourrait t'aider : http://www.athanazio.com/2008/02/21/working-with-isometric-maps/
Le site explique très bien la façon de faire pour trouver l'id ;)