2008-11-05 8 views
0

J'essaie d'être responsable de mes références "DOM" dans ce petit projet Flash 8/AS2.AS2 Version de MovieClip.getChildByName()?

Ce qui est devenu de plus en plus frustrant est l'obtention de références à d'autres clips et objets. Par exemple, actuellement mon code pour accéder au bouton d'envoi d'une forme ressemble à ceci

var b:Button = _level0.instance4.submitBtn; 

J'espérais qu'il y avait une méthode d'instance-récupération pour AS2 AS3 semblable à de MovieClip.getChildByName() ou même document.getElementById() de Javascript. Parce que coder en dur les noms de ces instances anonymes (comme instance4 dans le ci-dessus) se sentent vraiment vraiment, vraiment sale.

Mais, je ne trouve rien de ce genre à this AS2 Reference.

Répondre

1

Si MovieClip a été placé sur la scène dans l'environnement de développement intégré Flash, vous pouvez lui attribuer un nom d'occurrence approprié dans le panneau des propriétés.

S'il a été ajouté de manière dynamique, vous pouvez également donner un nom, et stocker en plus une référence:

var my_MC=createEmptyMovieClip("instanceName", depth); 

Dans les deux cas, vous pouvez les adresse avec _parentClip.instanceName ou my_MC.

+0

Mais alors, pour les instances profondément imbriquées, est-ce que ma seule option est de faire quelque chose comme _parentClip.childInstance.anotherChild.anotherChild.aaaaahhh? –

+0

Vous pouvez toujours stocker une référence dans une variable qui est plus facilement accessible. Ou: les clips eux-mêmes peuvent transmettre une référence à un gestionnaire central. par exemple. _root.addMenuItem (this); Cette fonction peut, par exemple, stocker des références à tous les éléments de menu dans un tableau, quelle que soit leur profondeur. – moritzstefaner

0

Vous pourriez il suffit de l'écrire vous-même (code non testé, mais vous obtenez l'idée):

MovieClip.prototype.getElementByName = function(name : String) : Object 
{ 
    var s : String; 
    var mc : Movieclip = null; 

    for(s in this) 
    { 
     if(this[s] instanceof MovieClip) 
     { 
      if(s == name) 
      { 
       mc = this[ s ]; 
       break; 
      } 

      mc = this[s].getElementByName(name); 
     } 
    } 

    return(mc); 
} 
1

Il existe plusieurs façons de procéder. Le plus simple est d'utiliser la notation Array. Votre exemple précédent, qui ressemble à ceci:

var b:Button = _root.instance4.submitBtn; 

ressemblerait à ceci en notation Array:

var b:Button = _root["instance4"].submitBtn; 

Donc, si vous voulez faire une boucle à travers 100 boutons déjà créés et définir l'alpha à 0:

for(var i:Number = 0; i < 101; i++) 
{ 
    var button:Button = _root["instance"+i].submitBtn; 
    button._alpha = 0; 
} 

Vous pouvez également utiliser eval ("instance4") pour faire la même chose, mais je suis un peu brumeux sur les problèmes de portée impliqués.