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

Résolu
Signaler
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009
-
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009
-
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

Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
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'
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
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'
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

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.
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
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'
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

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();
Messages postés
6146
Date d'inscription
dimanche 21 décembre 2003
Statut
Modérateur
Dernière intervention
4 septembre 2013
10
oui, tu peux . c'est même conseillé.

Peg'
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

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 ?
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

{Peut-on éditer un message ? :s}

Le lien correct : Lien
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

(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.
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

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 ?
Messages postés
8
Date d'inscription
lundi 20 avril 2009
Statut
Membre
Dernière intervention
16 février 2009

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.