begin process at 2012 05 27 06:38:49
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Scripts

 > 

ActionScript

 > 

Création dynamique de plusieurs MovieClip dans une boucle AS3


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Création dynamique de plusieurs MovieClip dans une boucle AS3

mardi 16 décembre 2008 à 00:37:45 | Création dynamique de plusieurs MovieClip dans une boucle AS3

sep2vigne

Bonjour,
Voici mon code :

for ( var i:int = 0; i < 20; i++ )
{                   
    
//... Je dessine un cercle noir de diamètre 20px positionné à 100px des bords haut et gauche :  
     var cercle:Shape = new Shape();
           cercle.graphics.beginFill(0x000000);
           cercle.graphics.drawCircle( 100, 100, 20 );
    
//... Je crée un MovieClip qui va contenir mon cercle :
     var conteneur:MovieClip = new MovieClip();               
           conteneur.addChild( cercle);
    
//... Puis j'ajoute mon MovieClip à la liste des objets affichés sur la scène :
     addChild( mp3Ball );              
    
//... Enfin, j'appel une classe qui déplace mon MovieClip vers de coordonnées tirées aléatoirement dans une boucle ENTER_FRAME :
    
//... Les paramètres passés au constructeur de ma classe MvmtAleatoire sont :
    
//... le MovieClip à déplacer
    
//... la limite minimum des nouvelles coordonnées sur X et Y
     //... la limite maximum des nouvelles coordonées sur X
     //... la limite maximum des nouvelles coordonées sur Y
     var mouvement:MvmtAleatoire = new MvmtAleatoire( mp3Ball, marge, stage.stageWidth - marge, stage.stageHeight - marge);       
}

RESULTAT :Je me retrouve bien avec 20 cercles noires sur la scène. Il sont placés à des coordonnées
d'origine aléatoires (comme demandé dans le constructeur de MvmtAleatoire). Ils entamment bien tous un premier déplacement vers des coordonnées toutes aléatoires et différentes.

MON PROBLEME :
Dès le 2e Déplacement, tous mes MovieClip viennent se positionner au même Y puis varient uniquement sur X. De plus, lorsque j'appel la fonction stop(); de
MvmtAleatoire (fonction qui consiste simplement à supprimer le Event.ENTER_FRAME qui anime mes cercles) cela ne stop que le dernier MovieClip crée dans la boucle .

TOUT CA POUR DEMANDER (car je pense que mon soucis vient "en autre" de là mais c'est pour cette quéstion précisément que je viens vous voir) :
Comment créer une variable MovieClip à la volée dans une boucle, lui assigner un nom d'instance propre (mc_0, mc_1, mc_2 ...), lui affecter des événements ...

EN BREF :
Existe-t-il un équivalent au set( "blabla", true ) mais du genre set( "mc_" + i, MovieClip ) ... comprenez-vous ?

Le fait d'écrire var mc:MovieClip = new MovieClip(); dans une boucle > cela signifie donc qu'à chaque tour ma variable est écrasée et remplacée par une nouvelle possédant le même nom.
Mais comment faire pour que l'accès à la variable du tour précédent ne soit pas définitivement perdu ?
Je n'arrive pas à comprendre comment utiliser efficacement la concaténation en AS3.

Vous souhaitant de bonnes fêtes,
A+, Seb

mardi 16 décembre 2008 à 00:44:58 | Re : Création dynamique de plusieurs MovieClip dans une boucle AS3

pegase31

Membre Club Administrateur CodeS-SourceS
Bonsoir,

Il suffit de donner un nom à ton Shape de cette façon : cercle.name = "cercle"+i;
De cette façon, tu pourras l'appeller via : getChildByName("cercle"+nb); //nb étant ne numéro du cercle à appeler.

Ce n'est pas la meilleure solution, mais elle fonctionnera dans ton cas sans créer de classe particulière.

Peg'
mardi 16 décembre 2008 à 20:53:12 | Re : Création dynamique de plusieurs MovieClip dans une boucle AS3

sep2vigne

Salut Pegase,

Merci beaucoup pour ton retour qui va me permettre de débloquer mon projet.
Avant d'aller tester tout ça, je me pose une question :

Etant donné que ma Shape n'est qu'une forme ajoutée à un movieClip. Une fois qu'elle est addChildée, je n'ai plus rien d'autre à lui demander (en tout cas rien de directement adressée à elle sans passer par son conteneur ... bref).
Aussi je pense plutôt utiliser .name pour donner un nom à mon MovieClip.

Le petit grain qui continue de me tracasser :
Imaginons que dans une bouble for, je déclare une nouvelle variable "var conteneur:MovieClip = new MovieClip();"
Je nomme ensuite mon MovieClip fraichement déclaré de la fçon que tu m'as indiquée : conteneur.name = "truc_" + i;
Au tour suivant de la boucle for, lorsque le code va relire "var conteneur:MovieClip = new MovieClip();", ne va-t-il pas considérer la variable "conteneur" comme étant un nouveauMovieClip (vide donc). Comment est-il alors possible que mon "conteneur" du tour précédent existe encore à ce moment là ?...

De plus je déclare une autre variable "mouvement", instance de ma classe MvmtAleatoire.
Le constructeur de cette classe récupère en paramètres le dernier MovieClip "conteneur" connu pour ce tour de boucle.
Il lui ajoute un EventListener (particulièrement moche > ENTER_FRAME)
.

>>> Mais du coup si mon conteneur est écrasé entre temps, tout comme mon instance de "mouvement", sauvagement remplacée au tour de boucle suivant par une nouvelle instance ... portant le même nom ... comment je fais pour parler à l'un ou appeller la méthode de l'autre ????


Dernière quéstion en coup d'vent : pour utiliser .name sur une occurence de ma classe mouvementAleatoire, dois-je définir au préalabale une fonction name() dans ma classe ou uniquement une variable String qui stock la valeur donnée.

Bon j'arrette pasque je pourrai continuer comme ca toute la nuit,

A+, Seb
mardi 16 décembre 2008 à 21:20:33 | Re : Création dynamique de plusieurs MovieClip dans une boucle AS3

pegase31

Membre Club Administrateur CodeS-SourceS
alors dans l'ordre :

- pour toujours avoir un seul movieclip, il suffit de le déclarer en début de boucle et le tour est joué.
- quand tu ajoutes un clip à la liste d'affichage, il est placé dans cette liste et tu ne peux donc plus l'écraser même en faisant "new"
- DisplayObject.name est une propriété déjà existante et n'a dont pas besoin d'être déclarée au préalable (comme x, y, width, etc ...)

Peg'
mercredi 17 décembre 2008 à 00:46:45 | Re : Création dynamique de plusieurs MovieClip dans une boucle AS3

sep2vigne

- bonheur
- bonheur partiel : oui mais une erreur devrait logiquement être relevée si la nouvelle occurrence "conteneur = new .." n'écrase pas l'ancienne occurrence. Je ne peux pas avoir deux occurrence "conteneur" ..?? je crois que j'suis en train de mélanger les noms de variables avec les bons vieux _mc...
- bonheur partiel itou : la classe MvmtAleatoire est une de mes classes, et comme je n'ai pas crée de propriété "name" dans cette classe je n'peux pas faire MvmtAleatoire.name ... si ? (c'était cette question que j'me posai tout à l'heure).

En tout cas big up comme on dit ;)
a+, Seb

mercredi 17 décembre 2008 à 09:42:42 | Re : Création dynamique de plusieurs MovieClip dans une boucle AS3

pegase31

Membre Club Administrateur CodeS-SourceS
Réponse acceptée !
- tu confond effectivement les variables des éléments graphiques et les éléments graphiques eux-même
- si ta classe extend un élément graphique, elle hérite directement de ses propriétés ... et donc de name !

Peg'
jeudi 18 décembre 2008 à 02:23:07 | Re : Création dynamique de plusieurs MovieClip dans une boucle AS3

sep2vigne

Et bin tu vois quand tu veux
Bon c'est cool, j'ai plus aucun souci pour cibler mes clips en utilisant le getChildByName( "machin_" + i );
J'aime de plus en plus l'AS3.
la prochaine étape c'est de m'assurer que je supprimer bien tous ce que je crée (listener, var plu utilisées... occurences .. bref tout ca)

Merci beaucoup pour cette échange,
En ésperant pouvoir t'aider un jour,
Seb



Cette discussion est classée dans : boucle, var, movieclip, cercle, mvmtaleatoire


Répondre à ce message

Sujets en rapport avec ce message

Problème de rafraîchissement sur un composant Horloge [ par Venusx117 ] Bonjour,Nouvel arrivant sur Flash8, je m'intéresse à la création de composants.Ainsi, j'ai tenté de développer un composant Watch (montre) qui indique Barre de chargement problème sour I.E. pas sous fireFox [ par embalmer ] Bonjour, Voilà je vous explique mon problème, j'ai crée une animation débutant par une barre de chargement. En plus de ce qui se trouve à la racine Mon attachMovie ne fonctionne pas.... [ par way2web ] Bonjour,j'essaye vainement d'attacher un movieClip à un autre chargé par loadClip, je le fais au onLoadInit et rien ne veut s'attacher  :? , une tenta Syntaxe dans une boucle [ par kiwan ] Bonjour,Je charge des textes dynamiquement dans un fichier flash. Je veux réaliser une boucle pour charger mes différents textes. Je déclare mais vari loadClipFolie [ par MangueCarotte ] Bonjour,J'essaie tt simplement de charger mon image"web_designer_graphiste2.jpg" ds mon clip.Mon image se trouve bien entendu la ou se trouve mon fla transfrmer jpeg en movieClip (as3) [ par guillaumelavezzari ] Bonjour à tous!Je bute depuis pas mal de temps sur la transformation d'un jpeg chargé dynamiquement en movie clip...Et j'ai besoin de faire cela, car déclaration variable boucle [ par xaviergainsbourg ] hello, Question : comment déclarer des variables dans une boucle ?exemple qui ne marche pas ://methode pour les nombres aléatoires    function getRand Récupérer les coordonnées de la souris [ par TrevorReznik ] Bonjour,J'ai une question de débutant !!!Je suis tombé sur un tutoriel dont une partie du code pour récupérer les coordonnées de la souris et les attr Probleme variable = 0 [ par Orange73 ] hello,voila j'ai un soucis de variable (AS3).J'ai le code suivant :import flash.events.*;var nbItems:int = 6;var i:int;var id:int;var currentId:Number Chargements de données et execution du code ... pas top. [ par on_drag_on ] Bonjour à tous.Bon mon titre est pas génial mais comme je saisis pas mon problème j'ai un peu de peine à le décrire. Alors voilà, pour mon pénible app


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,278 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales