AccueilAccueil  FAQFAQ  RechercherRechercher  S'enregistrerS'enregistrer  MembresMembres  Connexion  

Partagez | 
 

 Affichage grille isométrique

Voir le sujet précédent Voir le sujet suivant Aller en bas 
AuteurMessage
Ancestral
Utilisateur confirmé: Rang *
avatar

Messages : 227

MessageSujet: 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 Smile
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: 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
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2609
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: 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 Oups!

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
hofmeister
Bavard


Messages : 109

MessageSujet: 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.
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: 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 Oups!
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
Revenir en haut Aller en bas
hofmeister
Bavard


Messages : 109

MessageSujet: 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 Razz
Revenir en haut Aller en bas
Ancestral
Utilisateur confirmé: Rang *
avatar

Messages : 227

MessageSujet: 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.
Revenir en haut Aller en bas
Linky439
Utilisateur confirmé: Rang *****
avatar

Messages : 2609
Localisation : Sur le forum du CBNA...ou pas
Projet Actuel : La Galaxie Scellée

MessageSujet: 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 Oups!
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 mort2

_________________
Cliquez pour accéder aux topics dédiés !
   
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8885
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: 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

_________________
                 
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: 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
Revenir en haut Aller en bas
onilink_
Modérateur
avatar

Messages : 8885
Localisation : Montpellier
Projet Actuel : Planet Centauri
OniDev

MessageSujet: 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 Razz
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)

_________________
                 
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
avatar

Messages : 3324
Localisation : Dans une canonnière wookie.
Projet Actuel :
Wyvup
SpaceShift
Centauri-France


MessageSujet: Re: Affichage grille isométrique   Sam 24 Oct 2015 - 19:08

Non non il code bien en java beh
Revenir en haut Aller en bas
http://madmass.mype.fr/CBNA/
D-z
Utilisateur confirmé: Rang *****
avatar

Messages : 1608
Localisation : Montpellier

MessageSujet: 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.
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
avatar

Messages : 895

MessageSujet: 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
Revenir en haut Aller en bas
Contenu sponsorisé




MessageSujet: Re: Affichage grille isométrique   

Revenir en haut Aller en bas
 
Affichage grille isométrique
Voir le sujet précédent Voir le sujet suivant Revenir en haut 
Page 1 sur 1
 Sujets similaires
-
» attacher à une grille isométrique ?
» Affichage grille isométrique
» Déplacement d'une IA sur une grille isométrique
» carte isométrique délire :p
» Animation vue Isométrique [Help]

Permission de ce forum:Vous ne pouvez pas répondre aux sujets dans ce forum
Forum Le CBNA :: Développement :: Entraide confirmés-
Sauter vers: