Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Conversion coordonnées  (Lu 2613 fois)

0 Membres et 1 Invité sur ce sujet

skarwild

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • E-mail
Conversion coordonnées
« 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

Erwsaym

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
    • ErnSoft.com
    • E-mail
Re : Conversion coordonnées
« Réponse #1 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 ?
- ♪ -

skarwild

  • Newbie
  • *
  • Messages: 14
    • Voir le profil
    • E-mail
Re : Conversion coordonnées
« Réponse #2 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.

Erwsaym

  • Newbie
  • *
  • Messages: 27
    • Voir le profil
    • ErnSoft.com
    • E-mail
Re : Conversion coordonnées
« Réponse #3 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 !
- ♪ -

kimci86

  • Full Member
  • ***
  • Messages: 128
    • Voir le profil
Re : Conversion coordonnées
« Réponse #4 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à.
« Modifié: Mai 01, 2014, 03:44:50 pm par kimci86 »

Develog

  • Full Member
  • ***
  • Messages: 100
    • Voir le profil
    • E-mail
Re : Conversion coordonnées
« Réponse #5 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 ;)