Générateur de grille iso

Soyez le premier à donner votre avis sur cette source.

Vue 11 735 fois - Téléchargée 461 fois

Description

Ce code permet de générer une grille iso.
La longueur et la largeur de la grille corespondent a celle du document dans lequel le code est insérer.
La longeur et la largeur des cases sont a parametrer au debut du code (dans les constantes).

Si la largeur du document n'est pas un multiple de la largeur d'une case alors le programme arrondira le nombre de cases au multiple le plus proche.
Il fait de même pour la longueur.

Le fond est générer par le debut du code et corespond a la taille du document.

Merci de poster si vous rencrontrez des bugs, j'essayerai de les corriger le plus vite possible.

Ps: j'ai commenté le plus possible et désolé s'il y a des fautes d'orthographes.

Source / Exemple :


//par Q1PROUST

fond=createEmptyMovieClip("fond",-1)
xx=Stage.width;
yy=Stage.height;
fond.beginFill(0x000000,100);
fond.lineStyle(3,0x000000,100);
fond.moveTo(0,0);
fond.lineTo(0,yy);
fond.lineTo(xx,yy);
fond.lineTo(xx,0);
fond.lineTo(0,0);
fond.endFill();

//constantes
calque=1;//hauteur de depart des lignes
lar=50;//largeur d'une case
lon=50;//longueur d'un case

//rectification constantes
if(xx>lar)//arondi a un multiple de la largeur d'une case
{
	xx=xx/lar;
	xx=Math.floor(xx);
	xx=xx*lar;
}

if(yy>lon)//arondi a un multiple de la longueur d'une case
{
	yy=yy/lon;
	yy=Math.round(yy);
	yy=yy*lon;
}

//atribution des valeur max
txmax=xx;
tymax=yy;
//fin const
//pour les variables non-constantes
nbr=0;//pour la boucle
dx=0;//depart x
ax=0;//arrivé x
dy=0;//depart y
ay=0;//arrivé y
//fin

//debut boucles
while((dx<=txmax)&&(ay<=tymax)){
     ligne="ligne"+nbr;//var pour nommer les lignes
     ligne=createEmptyMovieClip(ligne,calque);//crée un Movie clip vide
     ligne.lineStyle(1.0,0xFFFFFF,100);//definie les propriétés des lignes
     ligne.moveTo(dx,dy);//point de départ (coordonées)
     ligne.lineTo(ax,ay);//point d'arrivé (coordonées)
     _root.nbr++;//incrémentation de nbr pour le nom des lignes 
     _root.calque++;// pareil pour calque pour leur hauteur
     _root.dx+=_root.lar;//aplication du décalage x 
     _root.ay+=_root.lon;//aplication du decalage y
}
//rectification des variables non-constantes
nbr=0;//pour la boucle
dx=txmax;//depart x
ax=txmax;//arrivé x
dy=tymax;//depart y
ay=tymax;//arrivé y

while((dx>=0)&&(ay>=0)){
      ligne="ligne"+nbr;//var pour nommer les lignes
      ligne=createEmptyMovieClip(ligne,calque);//crée un Movie clip vide
      ligne.lineStyle(1.0,0xFFFFFF,100);//definie les propriétés des lignes
      ligne.moveTo(dx,dy);//point de départ (coordonées)
      ligne.lineTo(ax,ay);//point d'arrivé (coordonées)
      _root.nbr++;// incrémentation de nbr pour nommer les lignes
      _root.calque++;// pareil pour calque pour la hauteur des lignesr
      _root.dx-=_root.lar;//aplication du décalage x 
      _root.ay-=_root.lon;//aplication du decalage y
}

//rectification des variables non-constantes
nbr=0;//pour la boucle
dx=txmax;//depart x
ax=txmax;//arrivé x
dy=0;//depart y
ay=0;//arrivé y

while((dx>=0)&&(ay<=tymax)){
      ligne="ligne"+nbr;//var pour nommer les lignes
      ligne=createEmptyMovieClip(ligne,calque);//crée un Movie clip vide      
      ligne.lineStyle(1.0,0xFFFFFF,100);//definie les propriétés des lignes
      ligne.moveTo(dx,dy);//point de départ (coordonées)
      ligne.lineTo(ax,ay);//point d'arrivé (coordonées)
      _root.nbr++;//incrémentation de nbr pour le nom des lignes
      _root.calque++;// pareil pour calque pour leur hauteur
      _root.dx-=_root.lar;//aplication du décalage x 
      _root.ay+=_root.lon;//aplication du decalage y
}
//rectification des variables non-constantes
nbr=0;//pour la boucle
dx=0;//depart x
ax=0;//arrivé x
dy=tymax;//depart y
ay=tymax;//arrivé y

while((dx<=txmax)&&(ay>=0)){
      ligne="ligne"+nbr;//var pour nommer les lignes
      ligne=createEmptyMovieClip(ligne,calque);//crée un Movie clip vide
      ligne.lineStyle(1.0,0xFFFFFF,100);//definie les propriétés des lignes
      ligne.moveTo(dx,dy);//point de départ (coordonées)
      ligne.lineTo(ax,ay);//point d'arrivé (coordonées)
      _root.nbr++;// incrémentation de nbr pour le nom des lignes
      _root.calque++;// pareil pour calque pour leur hauteur
      _root.dx+=_root.lar;//aplication du décalage x 
      _root.ay-=_root.lon;//aplication du decalage y
}
//fin

Conclusion :


il y aura une mise à jour lorsqu' un bug sera trouvé et rectifié.
Sur la miniature du screen on voit pas corectement la grille alors cliquez dessus si vous voulez voir ce que ca donne vraiment.

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
21
Date d'inscription
dimanche 13 mars 2005
Statut
Membre
Dernière intervention
28 août 2008

Merci top30 pour ce code qui est (beaucoup) plus clair et plus compréhensif.
A coté de celui ci mon code est ... enfin il ne sert plus a rien.
Apres quelques modifications j'ai obtenu la grille que je voulais.

Merci encore.
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

Tu devrais essayer ceci :




import flash.geom.* ;

var cellW :Number= 30 ;
var cellH :Number= 20 ;
var gridW :Number= 300 ;
var gridH :Number= 200 ;
var infos :Rectangle= new Rectangle( cellW, cellH, gridW, gridH ) ;
var style :Object= { size:3, color:0xFF6600, alpha:50 } ;
//

var myClip :MovieClip= getClipGrid( this, infos, style ) ;
myClip._x= 20 ; myClip._y= 20 ;
//

function getClipGrid( target:MovieClip, infos :Rectangle, style:Object, name:String, depth:Number )
:MovieClip{
if( depth== null ) depth= target.getNextHighestDepth() ;
if( name== null ) name= "Grid"+depth ;
//
var grid :MovieClip= target.createEmptyMovieClip( name, depth ) ;
var draw :MovieClip= grid.createEmptyMovieClip( "draw_mc", 0 ) ;
var mask :MovieClip= grid.createEmptyMovieClip( "mask_mc", 1 ) ;
//
var maxX :Number= Math.round(infos.width/infos.x) ;
var maxY :Number= Math.round(infos.height/infos.y) ;
//
if( !isNaN(maxX) && !isNaN(maxY) ){
grid.lineStyle( style.size, style.color, style.alpha );
//
var y :Number= -1 ;
while(++y<= maxY )
{
var x:Number= -1 ;
while(++x<= maxX )
{
var deltaX :Number= x*infos.x ;
var deltaY :Number= y*infos.y ;
//
grid.moveTo( deltaX, deltaY );
grid.lineTo( deltaX+infos.x, deltaY+infos.y );
//
grid.moveTo( deltaX, deltaY );
grid.lineTo( deltaX+infos.x, deltaY-infos.y );
}
}
mask.beginFill( 0xFF6600, 20 );
mask.lineTo( infos.width, 0 );
mask.lineTo( infos.width, infos.height );
mask.lineTo( 0, infos.height );
mask.lineTo( 0, 0 );
grid.setMask(mask);
}
return grid ;
}
Messages postés
21
Date d'inscription
dimanche 13 mars 2005
Statut
Membre
Dernière intervention
28 août 2008

J'ai rien dit j'ai trouvé des valeur pour le faire bug ...
En effet c'est pas jolie :p
J'vais repasser le code sur le systeme de boucle+rotate ca sera mieu je pense.
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
9
une grille iso est ce que tu peux trouver sur tout les RPG en 3D Isométrique, tels de Dofus (pour ne pas le citer) et dont les carrés sont souvent le double de largeur que de hauteur !

Teste avec les valeurs 50 et 25, moi il manque des traits au centre de l'écran


Peg'
Messages postés
21
Date d'inscription
dimanche 13 mars 2005
Statut
Membre
Dernière intervention
28 août 2008

Premierement, je te remercie Peg' d'avoir répondu...

J'ai fait des tests et je ne trouve pas de bugs (j'en ai peut etre pas fait assez ?)
Peut tu me donné des valeurs pour voir à quoi ressemble le bug ?

Et puis pour les 2 boucles + rotate. Je n'y avais pas pensé, je devrais effectivement refaire mon code sous cette forme.

Enfin, Peux-tu me décrire ce qu'est pour toi une grille isometrique ?

Merci.
Afficher les 8 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.