Placement aléatoire sans superposition

nalekstrem Messages postés 5 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 29 octobre 2004 - 28 oct. 2004 à 11:47
nalekstrem Messages postés 5 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 29 octobre 2004 - 29 oct. 2004 à 15:26
Bonjour à vous,
j'ai un petit truc qui m'enbète et me prend la tête...
Si vous pouviez m'aider!!
je suis en train de faire un petit jeu (le jeu des paires!) et j'aimerai placer aléatoirement sur la scene une vingtaine de clips mais sans qu'ils se touche...
J'arrive à les mettres sur la scene mais pas à les empecher de se superposer!!
Si vous avez une petite idée, je l'écouterai avec grand plaisir

Nalek

7 réponses

ozitoun Messages postés 115 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 25 mars 2008
28 oct. 2004 à 14:10
Si je me souviens bien le jeu des paires c'est des cartes retournées et tu dois les trouver par paires les cartes...

... et donc chaque carte est un clip... rectangulaires !

Tu connais donc la taille de ton clip (x,y)

donc quant les place sur ta scène aléatoirement, faut que tu leurs donne une position x,y précise !
___________
Zitoun
:-p
0
nalekstrem Messages postés 5 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 29 octobre 2004
28 oct. 2004 à 15:29
Pour le principe du jeu c'est ça en effet, mais je le transforme un peu!!
Ce n'est plus des rectangles sur lesquels on clike mais des brins d'herbes qui font apparaitre des objets...
Et pour compliquer les choses, je voudrais aussi que les X et Y soient aléatoire, ils peuvent être n'importe où sur le gazon mais sans se superposer...
Voilà voilà...

Pour se faire une idée, je met le code:

LesClips = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "a", "b", "c", "d", "e", "f", "g", "h", "i", "j");
NomListe = new Array("mc1", "mc2", "mc3", "mc4", "mc5", "mc6", "mc7", "mc8", "mc9", "mc10", "mc11", "mc12", "mc13", "mc14", "mc15", "mc16", "mc17", "mc18", "mc19", "mc20");
for (i=1; i<21; i++) {
nombre = "mc"+i;
duplicateMovieClip(LesClips[i], nombre, i);
setProperty(nombre, _x, Math.floor(Math.random()*800));
setProperty(nombre, _y, Math.floor(Math.random()*600));
//NomListe.splice(0, 0, nombre);
for (r=0; r<20; r++) {
NomClip = NomListe[r];
if (this.nombre, hitTest(this._parent.NomClip)) {
this.nombre._alpha = 10;
}
}
}

Nalek
0
ozitoun Messages postés 115 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 25 mars 2008
28 oct. 2004 à 15:41
effectivement c'est pas simple... mais ça reste gérable...

toujours avec du x,y....

en gros il faut que tu récupére tes x,y te tes clips que tu place sur ta scène.... (dans un tableau par exemple) et que tu les exclues de ton Math.random...

un possibilité serait de faire une condition if tes x,y sont dèjà occupés (à plus ou moins 10 pixels par exemple) then tu le déplace de 10 pixels...

suis-je clair ?

je suis curieux de voir le résultat quand ce sera terminé !
---------------
Zitoun
:-p
0
nalekstrem Messages postés 5 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 29 octobre 2004
28 oct. 2004 à 15:51
ouais c'est assez clair!!
maintenant ya plus qu'a le faire... ;o) (on va voir si j'en suis capable!)
et puis si j'ai encore des problemes, je re-post
Merci bien en tout cas!!

Nalek
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nalekstrem Messages postés 5 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 29 octobre 2004
28 oct. 2004 à 17:09
Finalement j'ai encore une question!!
Je dois utiliser quoi pour pouvoir avoir le "plus ou moins 10 pixels "...
J'arrive à récuperer les X et Y mais je coince sur la fourchette des 10 pixels près...
Ce qui fait qu'il y a toujours des bouts qui se chevauchent!!
Si tu sais comment faire?

Nalek
0
ozitoun Messages postés 115 Date d'inscription mardi 1 juin 2004 Statut Membre Dernière intervention 25 mars 2008
28 oct. 2004 à 17:27
ta condition sera

if (x>(x2-10) and x<(x2+10)) {
.... deplace de 10 pixels
}

où x2 est la position de celui déjà sur la scène

_____________________
Zitoun
:-p
0
nalekstrem Messages postés 5 Date d'inscription mercredi 7 janvier 2004 Statut Membre Dernière intervention 29 octobre 2004
29 oct. 2004 à 15:26
Bon j'ai réussi à tous faire et ça marche.... 1 fois sur deux!! lol
En fait je fais des boucles dans des boucles et au final le flash capitule et se "deconnecte": il ne veut plus de mon actionScript!!
vlà le script:

Etoiles = new Array("a", "b", "c", "d", "e", "f", "g", "h", "i", "a", "b", "c", "d", "e", "f", "g", "h", "i");
Start();
//---------------------------------------------------------------------------------
// La fonction Start
//---------------------------------------------------------------------------------
function Start() {
Passage = 0;
ValX = new Array();
ValY = new Array();
for (i=0; i<18; i++) {
nomCourant = Etoiles[i]+i;
// On duplike le clike en question duplicateMovieClip(Etoiles[i], nomCourant, i);
// On applique la fonction ReTouche
ReTouche();
// On ajoute ces nouvelles coordonnées dans les tableaux respecifs
ValX.splice(0, 0, PosX);
ValY.splice(0, 0, PosY);
}
}
//---------------------------------------------------------------------------------// La fonction ReTouche
//---------------------------------------------------------------------------------
function ReTouche() {
//On empeche l'animation de tourner en boucle
Passage++;
if (Passage>200) {
trace(Passage+" = limite atteinte");
ValX = new Array();
ValY = new Array();
Start();
} else {
// On donne à la variable "Zone" la valeur à ne pas dépasser
Zone = 80;
// On place le clip dupliqué aléatoirement sur la scene
setProperty(nomCourant, _x, Math.random()*600);
setProperty(nomCourant, _y, Math.random()*300);
// On recupere son X et son Y ( Math.floor, c'est pour avoir un entier)
PosX = Math.floor(getProperty(nomCourant, _x));
PosY = Math.floor(getProperty(nomCourant, _y));
// On crée une boucle pour comparer la valeur de X et Y par rapport à celles des tableaux
for (r=0; r(ValeurX-Zone) and PosX<(ValeurX+Zone) and PosY>(ValeurY-Zone) and PosY<(ValeurY+Zone)) {
// On recommence le positionnement aléatoire jusqu'à ce qu'il y ait une place de libre
trace("boucle r n°= "+r);
ReTouche();
}
}
}
}

En fait est-ce que flash permet, quand on execute un script, de tout arreter et de reprendre au début du script??? de recommencer en fait??

Nalek
0
Rejoignez-nous