AccueilAccueil  FAQFAQ  RechercherRechercher  Dernières imagesDernières images  S'enregistrerS'enregistrer  Connexion  
Le Deal du moment : -20%
-20% sur le Lot de 2 écrans PC GIGABYTE ...
Voir le deal
429 €

 

 Affichage grille isométrique

Aller en bas 
+3
Linky439
Asu
Ancestral
7 participants
AuteurMessage
Ancestral
Utilisateur confirmé: Rang *
Ancestral


Messages : 227

Affichage grille isométrique Empty
MessageSujet: Affichage grille isométrique   Affichage grille isométrique EmptySam 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:
Affichage grille isométrique Cbna110

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:
Affichage grille isométrique Cbna210Affichage grille isométrique Cbna310

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 ****
Asu


Messages : 895

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 *****
Linky439


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

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 !
Affichage grille isométrique I4AWwEs    Affichage grille isométrique CaVn0FN
Revenir en haut Aller en bas
hofmeister
Bavard



Messages : 109

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 ****
Asu


Messages : 895

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 *
Ancestral


Messages : 227

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 *****
Linky439


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

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 !
Affichage grille isométrique I4AWwEs    Affichage grille isométrique CaVn0FN
Revenir en haut Aller en bas
onilink_
Modérateur
onilink_


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

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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

_________________
Affichage grille isométrique Runningpotato1Affichage grille isométrique TvF6GED Affichage grille isométrique MdetltS
Revenir en haut Aller en bas
Asu
Utilisateur confirmé: Rang ****
Asu


Messages : 895

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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
onilink_


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

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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)

_________________
Affichage grille isométrique Runningpotato1Affichage grille isométrique TvF6GED Affichage grille isométrique MdetltS
Revenir en haut Aller en bas
Mass
*Excellent utilisateur*
Mass


Messages : 3351
Localisation : Dans une canonnière wookie.
Projet Actuel : Monter des trucs et des machins

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptySam 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 *****
D-z


Messages : 1611
Localisation : Montpellier

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptyDim 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 ****
Asu


Messages : 895

Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique EmptyDim 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é





Affichage grille isométrique Empty
MessageSujet: Re: Affichage grille isométrique   Affichage grille isométrique Empty

Revenir en haut Aller en bas
 
Affichage grille isométrique
Revenir en haut 
Page 1 sur 1

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: