2011-12-15 2 views
1

J'ai créé un jeu en flash, et en raison de la nature du jeu, j'ai de nombreux MovieClips placés sur la scène manuellement dans Flash CS4. Ils ne sont pas ajoutés au programme en tant qu'enfants, et j'ai donc du mal à y accéder dans la classe document. Jusqu'à présent, la seule méthode que j'ai pu utiliser est de faire stage.addChild(active_area); (par exemple), mais il y a beaucoup de clips, tous très différents, donc cette méthode semble incorrecte.Accéder aux instances MovieClip déjà présentes sur la scène dans Document Class?

J'ai découvert que mes MovieClips ne sont pas les enfants de la scène, mais en fait MainTimeline, comme quand je boucle for par stage.getChildAt(i);, un seul enfant, root1, est tracée.

Comment puis-je accéder à des clips vidéo placés sur la scène dans la timeline à partir de la classe de document, sans avoir à les ajouter manuellement en tant qu'enfants sur la scène?

[EDIT]


Il semble donc que mon problème était que je ne pouvais pas accéder aux MovieClips, il était que je ne modifie pas les valeurs des MovieClips, donc je n'étais pas n'inscrivant aucun changement à leur égard.

Voici le code après je l'ai fixé:

function manage_cursor(e:Event):void { 
     prevX=currX; 
     prevY=currY; 
     currX=stage.mouseX; 
     currY=stage.mouseY; 
     var i:int; 

     if (currY > (stage.stageHeight/2)) { 

      for (i = 0; i < this.numChildren; i++) { 
       if (this.getChildAt(i).name!="active_area" && stage_kelp.y > kelp.min_y_mod) { 
        this.getChildAt(i).y-=1;      
       } 
      } 
     } 
     if (currY < (stage.stageHeight/2)) { 
      for (i = 0; i < this.numChildren; i++) { 
       if (this.getChildAt(i).name!="active_area" && this.stage_kelp.y < kelp.max_y_mod) { 
        this.getChildAt(i).y+=1; 
       } 
      } 
     } 

    } 

Le problème avant était que je vérifiais stage.numChildren;, en utilisant stage.getChildAt(i) et modifier cet enfant, qui était le TimeLine. Cela m'a donné l'effet de tous mes autres MovieClips sur scène, donc j'étais sous l'hypothèse que leurs valeurs étaient en train d'être changées, mais elles ne l'étaient pas, donc, aucun de mes conditionnels ne se déclenchait, me donnant l'illusion que je n'étais pas pas accès aux MovieClips. Changer stage à this, comme recommandé par paquet dans les réponses ci-dessous, a résolu le problème pour moi.

Répondre

3

Essayez ce code dans votre Document Class:

trace(this["movieclip_name"]); 

this fait référence à la MainTimeline dans votre Document Class.

3

Avez-vous essayé d'exporter le MovieClip pour ActionScript et lui avez donné un identifiant? Vous pouvez généralement simplement utiliser l'identifiant pour accéder au MovieClip après cela.

+0

J'ai donné un paquet à la réponse parce que sa réponse a résolu mon problème, mais une fois que j'ai commencé à utiliser 'this.numChildren (i)' au lieu de 'stage.numChildren (i);', ta réponse a aussi fonctionné, donc je t'ai upvoted . – BumbleShrimp

+0

Pas de soucis! C'est apprécié, bonne chance, désolé d'avoir oublié de revenir sur votre question plus tôt. –

Questions connexes