Peut-on attacher plusieurs MovieClip à une seule classe ? {AS3}

Résolu
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009 - 12 févr. 2009 à 16:13
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009 - 16 févr. 2009 à 10:08
Bonjour à tous,
Je rencontre un soucis sous Flash cs3 et j'aurais besoin de votre aide :

Je possède un plan où se situe des objets graphiques qui représentent des bâtiments, je les ai converti en symbole (MovieClip) et j'aimerais les faire interagir dans mon code AS3. J'ai une Main (.as) qui est la classe de définition de ma scène (plan.fla).

Pour se faire j'aimerais utilisé la méthode getChildByName() (sur ma Main), qui demande en paramètre le nom de l'objet à trouver... Le problème est que je n'ai aucune idée de ce à quoi correspond ce nom sur mon .fla.
Est-ce le nom d'occurrence ? Le nom du symbole dans la bibliothèque ? ; j'ai essayé les deux mais flash me retourne 'null' .
 
Voici un extrait de mon code :

 
       
        var leNomBat:String;
        // Récupère le nom du Batiment sélectionné dans la liste.  
        leNomBat=saveServiceSelect.getLeBatiment().getNomBatiment();
        trace(leNomBat); // renvoie un String (exemple "B1A")    
        trace(this.getChildByName(leNomBat)); // affiche null
            


Ici, sur mon .fla j'ai un MovieClip portant le nom d'occurrence "B1A" et dont le nom de symbole est exactement le même. Pourtant getChildByName() me retourne 'null'. Ma question est : Est-ce que je dois créer une classe ayant pour nom "B1A" (et si c'est le cas j'en aurais une pour chaque bâtiment ; soit une vingtaine ) ? Où existe-t-il une autre méthode ?

Merci de m'avoir lu, j'ai essayé d'être le plus clair possible mais je ne sais pas vraiment comment poser le problème, alors soyez compréhensifs s'il vous plaît .

 

11 réponses

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
16 févr. 2009 à 09:33
Je te l'ai donnée dés le départ :
"La solution la plus simple serait que ce soit ta classe elle-même qui
place le movieClip sur la scène (sur elle-même, étant déjà sur la
scène). A ce moment-la, elle pourra les manipuler."

Et ce n'est pas du bricolage, l'externalisation de ta classe ne vaut que si tu utilises plusieurs classes externes, ce qui n'est pas le cas.

Peg'
3
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
12 févr. 2009 à 16:59
Bonjour,

Une classe Custom ne peut pas voir les éléments présents sur la bibliothèque à moins de les-lui passer en paramètre.
La solution la plus simple serait que ce soit ta classe elle-même qui place le movieClip sur la scène (sur elle-même, étant déjà sur la scène). A ce moment-la, elle pourra les manipuler.
Pour obtenir une occurence d'un movieClip de la bibliothèque dans ta classe, il suffit de faire :

var monClip:NomLiaison = new NomLiaison();

Peg'
0
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
12 févr. 2009 à 23:28
Bonsoir,

[QUOTE="pegase31"] La solution la plus simple serait que ce soit ta classe elle-même qui place le movieClip sur la scène /QUOTE

Le problème est qu'il s'agit de forme tracées à l'aide de l'outil plume et complètement ' difformes ' , donc quasiment impossible à générer par le code :s.

[QUOTE="pegase31"] var monClip:NomLiaison = new NomLiaison(); /QUOTE

Qu'est-ce que tu entend par 'NomLiaison' ?

Merci tout de même de la réponse ça m'a un peu éclairer sur le sujet, je vais continuer d'y réfléchir.
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
13 févr. 2009 à 04:24
Tu dois transformer tes formes en movieClip et donc les avoir dans ta bibliothèque, que tu exportes pour actionscript ...
Tu n'as jamais fait ça ?

Peg'
0

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

Posez votre question
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 08:08
Bonjour,

Si je l'ai déjà fait, mais je ne savais pas qu'on pouvais le faire directement par le code ^^.

Donc si j'ai bien compris, il faudra que je fasse :

var : mc1 : monBatiment : new nomBatiment();

Par contre est-ce que ma liaison peut être utilisée plusieurs fois, c'est à dire pour plusieurs MovieClip ?

La classe 'monBatiment'  servant de liaison ca donnerait :

var nomSymbole1:monBatiment : new monBatiment();
var nomSymbole2:monBatiment : new monBatiment();
0
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
13 févr. 2009 à 08:37
oui, tu peux . c'est même conseillé.

Peg'
0
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 09:09
Ok, merci du coup de main ;)
Sinon j'ai vu qu'on pouvait utiliser une méthode statique pour attacher un symbole à un clip ( registerClass() ) :

http://livedocs.adobe.com/flash/9.0_fr/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts_bak&file=00005394.html

Est-ce qu'il vaut mieux utiliser cette méthode plutôt qu'une déclaration standard ?
0
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 09:15
{Peut-on éditer un message ? :s}

Le lien correct : Lien
0
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
13 févr. 2009 à 10:28
(Désolé pour le triple post)

Ca veut pas me mettre le vrai lien donc je vais le mettre en texte  :

http://livedocs.adobe.com/flash/9.0_fr/main/wwhelp/wwhimpl/common/html/wwhelp.htm?context=LiveDocs_Parts_bak&file=00005394.html

Sinon j'ai toujours un problème :

bat_B1A est déclarée dans le corps de ma Main en attribut public (var public).
Je l'initialise dans mon constructeur :

{Code=Main.as/Main()}

bat_B1A = new myBatimentMedical("bat_B1A");
this.addChild(bat_B1A);

{/Code}

Cette fonction se lance sur un event de bouton :

{Code=Main.as/function affichePlan()}

trace(bat_B1A.getNomBatiment());
bat_B1A.visible = false;

{/Code}

J'arrive bien à récupérer le nom du bâtiment ce qui signifie que ma variable est visible par ma fonction. Néanmoins, je n'arrive pas à cacher mon composant.
0
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 09:29
Pegase31, m'as proposé une solution en privé qui est de transférer le code de ma main sur un calque actions ce qui faciliterai l'accès aux objets de la scène.

Bien que cette solution fonctionne, je trouve qu'il s'agit un peu de 'bricolage', et ce projet étant d'ordre professionnel j'aimerais clarifier le plus possible mon programme.

Auriez-vous une autre solution ?
0
valvincent Messages postés 8 Date d'inscription lundi 20 avril 2009 Statut Membre Dernière intervention 16 février 2009
16 févr. 2009 à 10:08
Ok, merci.

Déjà faut que je réinstalle flash parce qu'il bug... J'ai des fenêtre qui se ferment toutes seules, sans aucune intervention de ma part ><

Je clos le sujet.
0
Rejoignez-nous