JeuWeb - Crée ton jeu par navigateur
Coordonnées souris sur map iso - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Coordonnées souris sur map iso (/showthread.php?tid=1106)



Coordonnées souris sur map iso - Aleskweb - 14-10-2010

Hello tout le monde,

Après des heures et des heures d'études sur la POO et sur le langage flash, je suis enfin arrivé a une obtenir une map ! De ce type ci : http://img266.imageshack.us/img266/3488/mapq.png

Bon pour le moment, elle n'est pas interactive, mais je me heurte a un problème, croyez moi, j'y ai passé bien deux heures sans tomber sur la moindre piste.

Je recherche la formule qui permettrait de, a partir des coordonnées de la souris, me donner les coordonnées de la case que l'on survole.

J'ai tout d'abord essayé sur une map 2D avec des carrés, aucun problème ici.

En revanche pour l'iso, rien mais rien du tout. Je n'ai trouvé aucune formule coherente.

Evidement, avec quelques recherches sur la toiles, j'ai trouvés plusieurs formules, mais au lieu d'appliquer un bête copier coller, j'aimerais bien comprendre le principe.


Petit problème qui s'y ajoute : Il faudrait que cela soit calculé par rapport a la position de notre perso, puisque la map sera défilante...

Merci de me faire part de toutes pistes, même si vous en etes pas sur Wink

Cordialement Aleskweb


PS: Les coordonnées du perso se composent de deux information : La tuile plus une position dans cette tuile. Ex Tile 10/2 + 20 pxX + 12pxY


RE: Coordonnées souris sur map iso - Globe - 14-10-2010

Pourquoi ne pas simplement faire un onMouseOver sur tes tiles ? Sinon c'est du flash j'ai aucune idée de comment c'est codé mais il doit exister une fonction similaire non ?


RE: Coordonnées souris sur map iso - Thêta Tau Tau - 14-10-2010

Il s'agit d'un "simple" problème de changement de répère d'un vecteur (niveau term S je crois).
(par contre j'y connait rien en flash, je t'explique que le côté mathématique).

La position de la souris est un vecteur S=(X,Y) dans un repère orthonormé, de vecteurs I=(1,0) et J=(0,1) (en pixel). Pour simplifier prends la même origine pour les deux repères (si le point (0,0) de ta carte est (200,300) par exemple, X=xsouris-200, Y=ysouris-300).
Tu doit mesurer les vecteurs définissant le repère de ta carte (sous paint, je trouve i=(32,16) et j=(-32,16) avec l'image que t'as filé).
On appelle s=(x,y) (en minuscule) les coordonnées de ta souris dans le repère de la carte.
Tu as (je détaille pas, je passe par une inversion de matrice):
x=X/(2x32)+Y/(2x16)
y=-X/(2x32)+Y/(2x16)
Après t'as plus qu'à arrondir en dessous et t'as tes coordonées (vérifie quand même mon 32x16).

Je sais pas s'y j'ai été clair, demande moi sinon (ou a google mais quand j'ai cherché il m'a sorti du calcul matriciel)

fonction en php :

function convertir($X,$Y)
{
$x=floor($X/(2*32)+$Y/(2*16));
$y=floor(-$X/(2*32)+$Y/(2*16));
return array($x,$y);
}



RE: Coordonnées souris sur map iso - gameprog2 - 16-10-2010

Chaque tile est une image ou c'est toute la carte en une seule image dans ton jeu ?
Dans le cas 1, tu ajoute juste un onclick sur chaque tile (comme le dit Globe) et une fonction qui te donne la position souris mais si c'est le cas 2 bein le modèle qu'expose Thêta.

EDIT : Rectificatif, Globe parlait très justement d'un OnMouseOver et j'ai dit onclick par mégarde (car je pensais que le joueur devait aller directement à la position voulue, mais il s'agit juste apparemment de voir la position).


RE: Coordonnées souris sur map iso - Aleskweb - 16-10-2010

Merci pour vos reponses, je n'avais pas compris ce concept de vecteurs, non c'est bien un jeu basé sur les tuiles. Mais le problème est qu'imaginons, on veut se "teleporter" derrière un arbre, si l'on clique sur l'arbre, cela ne nous sélectionnera pas la cases en dessous. Donc le onMouseOver ne fonctionnera surement pas....

Je vais tester la solution de Teta

J'avais déja trouvé cet article : http://www.developpez.net/forums/d880196/applications/developpement-2d-3d-jeux/contribuez/coordonnees-map-2d-isometriques/ Mais je ne comprenais pas ce qu'étais tilesand


RE: Coordonnées souris sur map iso - Aleskweb - 17-10-2010

Resultas :

function coord(pEvt:Event):void{

xsouris = mouseX-600;
ysouris = mouseY-200;
xsouris = xsouris/(2*40) + ysouris/(2*20);
ysouris = -xsouris/(2*40) + ysouris/(2*20);
affcoord.text = " Souris X = " + mouseX + " ("+xsouris+")"+ " Souris Y = " + mouseY +" ("+ysouris+")";

}

Les x marchent, mais pas les y....


RE: Coordonnées souris sur map iso - Thêta Tau Tau - 17-10-2010

Oui normal tu modifie xsouris avant de calculer ysouris (avec xsouris).


RE: Coordonnées souris sur map iso - Aleskweb - 17-10-2010

En effet j'avais zappé ça car sa marchait quand je multipliais ysouris par 2 lol.

Tout marche, merci a toi Smile


Edit: En fait non, dernier petit problème, au lieu davoir une suite (...,-2,-1,0,1,2,...) sa me donne (...,-2,-1,0,0,1,2,...) Il y a deux zeros ....


RE: Coordonnées souris sur map iso - Aleskweb - 17-10-2010

Résolu, me falais faire un floor et un ceil !