Bonjour à tous,

Après plusieurs heure de recherche, j'ai finis par aboutir à une formule qui permet d'afficher et de retrouver la tile sur laquelle on clique, peu importe la forme de notre tile (du moment que c'est en iso 2D).

Je suis partis de la formule d'affichage suivante:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
int x = 0;
    int y = 0;
    while (y < _Height)
    {
        x = 0;
        while (x < _Width)
        {
            _Map[y][x].setPosition((x * _CaseWidth) - (y * _CaseWidth), (y * _CaseHeight) + (x * _CaseHeight));
            x++;
        }
        y++;
    }
Qui permet pour chaque tile de l'afficher sur l'écran.
L'important est le _CaseWidth et _CaseHeight qui correspondent à :
_ La distance entre le pixel 0 et le premier pixel de couleur horizontal
_ La distance entre le pixel 0 et le premier pixel de couleur vertical

En schématisant avec une tile comme ceci:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
OAAAACAAAAA
AAAACCCAAAA
AACCCCCCCAA
CCCCCCCCCCC
AACCCCCCCAA
AAAACCCAAAA
AAAAACAAAAA
O est le pixel 0, C un pixel de couleur, A un pixel transparent.
on calcul donc _CaseWidth = Cx-Ox et _CaseHeight = Cy-Oy en prenant pour C le premier pixel rencontré selon l'axe.

à partir de là, j'ai réussi à trouver la formule suivante qui permet de retrouver les coordonnée map à partir des coordonnée écran:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
 
// calcul des coordonnée flottante à partir du point cliqué (x,y)
float casey = (((y*CaseWidth)/CaseHeight)-x)/(CaseWidth+CaseWidth);
float casex = ((casey*CaseWidth+x)/CaseWidth) - 1;
// approximation des coordonnée flottante
int vx = casex + 0.5;
int vy = casey + 0.5;
Cette méthode me permet de ne pas utilisé le rapport entre x et y (régulièrement x = 2y en 2D isométrique), de ne pas m'inquiéter de l'angle de transformation des tiles, de la taille de l'image (des fois les tiles ont un background en dessous comme l'image ci-dessous) .......

Nom : herbe.png
Affichages : 414
Taille : 53,9 Ko

Ayant passé de longues heures de recherches sur internet et de calcul sur papier, je me devais de partager ce travail afin de le soumettre à la communauté pour en explorer les limites.
Je me doute bien que ce travaille a déjà du être fait, mais partout, j'ai trouvé des formule à partir du cosinus et sinus de l'angle de transformation.

Merci de m'avoir lu, et n'hésité pas à commenter et/ou tester.
Je suis actuellement en train de le tester et le transformer afin d'avoir une meilleur rapidité d’exécution et précision.