| Affichage grille isométrique | |
|
|
Auteur | Message |
---|
Ancestral Utilisateur confirmé: Rang *
Messages : 227
| Sujet: Affichage grille isométrique Sam 24 Oct 2015 - 13:22 | |
| Bonjour à tous, voici mon problème: Je cherche à réaliser un petit jeu en 2D isométrique.L'ordre d'affichage des tuiles de la grille a donc une importance capitale. Actuellement mes tuiles sont dessinées à l'écran dans l'ordre suivant: A l'aide d'une simple double boucle: - Code:
-
for(int y=0;y<arrayS;++y){ for(int x=0;x<arrayS;++x){ int posX=isoOrigin.x+x*(caseW/2); int posY=isoOrigin.y+y*(caseH); drawTile(new Coordinate(posX,posY).toIso(),caseW, caseH, array[x][y].val); } } Mais pour les raisons évoquée plus haut je souhaiterais plutôt afficher mes tuiles dans cet ordre: Mais j'ai beau me triturer les méninges je n'arrives pas à savoir comment. Ma grille est représentée par un tableau d'entiers à deux dimensions carré de taille arrayS (array[arrayS][arrayS]). Une solution, une piste, une suggestion? Je prends tout! Merci |
|
| |
Asu Utilisateur confirmé: Rang ****
Messages : 895
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 14:35 | |
| - Code:
-
for (int y=0; y<arrayS; ++y) { for (int stepY=y, int x=0; stepY>0; --stepY, ++x) { int posX = isoOrigin.x + x*(caseW/2); int posY = isoOrigin.stepY + stepY*(caseH); drawTile(new Coordinate(posX, posY).toIso(), caseW, caseH, array[x][y].val); } } Espace ton code aussi, c'est bien plus lisible Je sais pas en quoi tu code ton jeu, mais ça a l'air d'être du C# ou du Java. Je suis pas sûr qu'ils gèrent le "," comme le C++ (ce pour quoi j'ai codé l'algorithme). _________________ <Cysteine> nON mais la touche maj s'active/se désactive toute seule <Cysteine> et a du mal à réponDRE QUANd j'appuie dessus <Cysteine> et je l'ai démont2? IL Ny a rien DEDANs
|
|
| |
Linky439 Utilisateur confirmé: Rang *****
Messages : 2643 Localisation : Sur le forum du CBNA...ou pas Projet Actuel : La Galaxie Scellée
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 14:52 | |
| C'est du GML ça... Je sais que beaucoup de monde a tendance à cracher sur le GML par ici, mais tout de même _________________ Cliquez pour accéder aux topics dédiés ! |
|
| |
hofmeister Bavard
Messages : 109
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 14:53 | |
| Bonjour, je crois qu'il faut chercher du côté des suites. La formule pour calculer la valeur après n additions, est n*(n+1)/2, si je me rappelle bien. Ceci est la formule pour ajouter un de plus à chaque fois, comme dans 1+2+3. Voyons pour ce cas plus précis 0,1,3,6,10: s=(n)*(n+1)/2, la formule telle quelle marche. 0,2,5,9,14: s=n+n*(n+1)/2, ça a l'air de marcher. pour 2,4,7,11 et les autres lignes n=i+i*(i+1)/2 où i est le numéro de colonne du tableau; puis s=n+n*(n+1)/2. Voila déjà une piste, bon courage. |
|
| |
Asu Utilisateur confirmé: Rang ****
Messages : 895
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 15:11 | |
| - Linky439 a écrit:
- C'est du GML ça... Je sais que beaucoup de monde a tendance à cracher sur le GML par ici, mais tout de même
Depuis quand y'a des int, des classes et des méthodes et de l'allocation dynamique en GML? Hofmeister, ce n'est pas réellement ce qu'il veut et mon algorithme est certainement beaucoup plus performant et court. _________________ <Cysteine> nON mais la touche maj s'active/se désactive toute seule <Cysteine> et a du mal à réponDRE QUANd j'appuie dessus <Cysteine> et je l'ai démont2? IL Ny a rien DEDANs
|
|
| |
hofmeister Bavard
Messages : 109
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 15:33 | |
| Oui le temps que j'écrive la réponse et t'avais répondu. Mais sinon c'est une autre option pour numéroter les cases, c'est comme ça que j'aurais fait en tous cas. J'ai hésité à valider, mais bon ça fait juste une réplique de plus, et puis je ne voulais pas m'être pris la tête pour rien |
|
| |
Ancestral Utilisateur confirmé: Rang *
Messages : 227
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 16:10 | |
| - Soundii a écrit:
-
- Code:
-
for (int y=0; y<arrayS; ++y) { for (int stepY=y, int x=0; stepY>0; --stepY, ++x) { int posX = isoOrigin.x + x*(caseW/2); int posY = isoOrigin.stepY + stepY*(caseH); drawTile(new Coordinate(posX, posY).toIso(), caseW, caseH, array[x][y].val); } } Espace ton code aussi, c'est bien plus lisible Je sais pas en quoi tu code ton jeu, mais ça a l'air d'être du C# ou du Java. Je suis pas sûr qu'ils gèrent le "," comme le C++ (ce pour quoi j'ai codé l'algorithme). Merci Soundii, c'est ce qu'il me fallait! Mis à part quelques "y" que tu as oublié de remplacer par "stepY" dans la deuxième boucle et inversement le code fonctionne. Mais qu'a moitié seulement. En fait, la condition d'arrêt sur y ne permet de dessiner que la première moitié du tableau. Donc j'ai décidé de refaire une double boucle sur le même principe mais en partant cette fois-ci de l'autre extrémité de mon tableau. Ca marche mais je suis quand même ouvert à tout autre suggestion d'amélioration pour résoudre ce petit problème. Merci à toi aussi hofmeister, pour tout te dire c'est plutôt dans ce sens que mon raisonnement m'avait mené de prime abord mais j'avoue m'être un peu embrouillé et j'ai fini par perdre patience. Mais ce que tu écris à l'air plutôt juste, je me demande si je vais pas le tenter de cette manière finalement. D'autant plus que ca me permettrait de dessiner mon tableau d'une traite cette fois. Ah et j'avais oublié de le préciser mais en effet c'est bien du Java. |
|
| |
Linky439 Utilisateur confirmé: Rang *****
Messages : 2643 Localisation : Sur le forum du CBNA...ou pas Projet Actuel : La Galaxie Scellée
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 16:12 | |
| - Soundii a écrit:
- Linky439 a écrit:
- C'est du GML ça... Je sais que beaucoup de monde a tendance à cracher sur le GML par ici, mais tout de même
Depuis quand y'a des int, des classes et des méthodes et de l'allocation dynamique en GML?
Hofmeister, ce n'est pas réellement ce qu'il veut et mon algorithme est certainement beaucoup plus performant et court. Oula oui, je suis fatigué moi... Faut que j'aille me coucher _________________ Cliquez pour accéder aux topics dédiés ! |
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 16:16 | |
| Pour les gros calculs au pire si vraiment nécessaires, suffit de les mémoriser dans un tableau d'indices hein :p
|
|
| |
Asu Utilisateur confirmé: Rang ****
Messages : 895
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 17:03 | |
| Ha oui j'avais complétement oublié la deuxième partie du tableau x) oni, ça risque pas d'occuper de la ram inutilement? Vu qu'on parle de Java, on est pas à l’instruction près huhu _________________ <Cysteine> nON mais la touche maj s'active/se désactive toute seule <Cysteine> et a du mal à réponDRE QUANd j'appuie dessus <Cysteine> et je l'ai démont2? IL Ny a rien DEDANs
|
|
| |
onilink_ Modérateur
Messages : 9178 Localisation : Montpellier Projet Actuel : Planet Centauri
OniDev
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 17:27 | |
| Bah non normalement il code en C++ de souvenir. Et heu la ram, je veux dire même s'il a une tilemap de 100² avec des int ça fait que 40ko hein A moins qu'il programme en embarqué c'est plutôt négligeable pour le coup x) (et vaut mieux consommer plus de ram et faire moins de calculs en général) |
|
| |
Mass *Excellent utilisateur*
Messages : 3351 Localisation : Dans une canonnière wookie. Projet Actuel : Monter des trucs et des machins
| Sujet: Re: Affichage grille isométrique Sam 24 Oct 2015 - 19:08 | |
| Non non il code bien en java |
|
| |
D-z Utilisateur confirmé: Rang *****
Messages : 1611 Localisation : Montpellier
| Sujet: Re: Affichage grille isométrique Dim 25 Oct 2015 - 2:16 | |
| - Code:
-
for (int y=0; y<arrayS; ++y) { for (int stepY=y, int x=0; stepY>0; --stepY, ++x) { int posX = isoOrigin.x + x*(caseW/2); int posY = isoOrigin.stepY + stepY*(caseH); drawTile(new Coordinate(posX, posY).toIso(), caseW, caseH, array[x][y].val); } } - Soundii a écrit:
- Je suis pas sûr qu'ils gèrent le "," comme le C++ (ce pour quoi j'ai codé l'algorithme).
- Code:
-
drawTile(new Coordinate(posX, posY).toIso(), caseW, caseH, array[x][y].val); - Soundii a écrit:
- C++ (ce pour quoi j'ai codé l'algorithme).
- Code:
-
new Coordinate - Soundii a écrit:
- C++
/me sort la cravache _________________ Home is not a place, it's a feeling.
|
|
| |
Asu Utilisateur confirmé: Rang ****
Messages : 895
| Sujet: Re: Affichage grille isométrique Dim 25 Oct 2015 - 13:01 | |
| - D-z a écrit:
-
- Code:
-
for (int y=0; y<arrayS; ++y) { for (int stepY=y, int x=0; stepY>0; --stepY, ++x) { int posX = isoOrigin.x + x*(caseW/2); int posY = isoOrigin.stepY + stepY*(caseH); drawTile(new Coordinate(posX, posY).toIso(), caseW, caseH, array[x][y].val); } }
- Soundii a écrit:
- Je suis pas sûr qu'ils gèrent le "," comme le C++ (ce pour quoi j'ai codé l'algorithme).
- Code:
-
drawTile(new Coordinate(posX, posY).toIso(), caseW, caseH, array[x][y].val);
- Soundii a écrit:
- C++ (ce pour quoi j'ai codé l'algorithme).
- Code:
-
new Coordinate
- Soundii a écrit:
- C++
/me sort la cravache Oui oui je sais, j'ai juste modifié l'algorithme comme si j'étais en C++ huhu _________________ <Cysteine> nON mais la touche maj s'active/se désactive toute seule <Cysteine> et a du mal à réponDRE QUANd j'appuie dessus <Cysteine> et je l'ai démont2? IL Ny a rien DEDANs
|
|
| |
Contenu sponsorisé
| Sujet: Re: Affichage grille isométrique | |
| |
|
| |
| Affichage grille isométrique | |
|