Question

Est-il possible d’obtenir une liste de toutes les occurrences avec un nom dans une animation flash à l’aide d’actionscript 2. Comme un tableau contenant toutes les zones de texte nommées, toutes les occurrences de movieClip, etc. J'aimerais que le concepteur puisse l’ajouter ou supprimez des zones de texte, etc., et le code actionscript peut les rechercher dynamiquement et extraire les textes à partir d'une source de données distincte.

Je suppose que ce que je veux, c’est quelque chose comme une arborescence DOM ou encore mieux comment getElementByName () fonctionne en JavaScript. Et aussi obtenir la valeur de chaîne du nom de l'instance afin que je puisse trouver sa valeur de texte dans un fichier XML.

Supposons que le concepteur ajoute une nouvelle zone de texte avec le nom "copyright". et mon code devrait (sans avoir à changer le script) trouver les données avec l'id "copyright". dans un fichier XML s'il existe, et ajoutez la valeur à la zone de texte.

Était-ce utile?

La solution

@Stein Gauslaa Strindhaug

C'est assez dur, mais ça devrait faire l'affaire!

private function traceAllChildren(rootContainer:DisplayObjectContainer):void {
    for(var i=0; i < rootContainer.numChildren; i++) {
        var item:* = rootContainer.getChildAt(i);
        try {
            traceAllChildren(item);
        } catch (e:Error) {
            trace(e.toString());
        }
        trace(item.toString());
        // This is the block where you can affect
        // an 'item' depending on it's type, name, etc..
        // eg: 
        //      if (item.toString() == '[object TextField]') {
        //          item.text = "The text I want to insert";
        //      }
        // or
        //      if (item.name == myTextFieldNameVar) {
        //          item.text = "The text I want to insert";
        //      }
    }
}

Appelez-le ainsi: traceAllChildren (this) ou traceAllChildren (myParentMovieClip).

J'espère que cela vous aide, bonne chance!

Autres conseils

Réponse courte: il n'y a pas de " intégré " façon de faire cela. Vous pouvez essayer de récupérer des fonctionnalités similaires à getElementByName (), mais cela nécessiterait de commencer à _root et de parcourir votre contenu - et à proprement parler, un clip commence par des références à ses enfants, mais ils peuvent être supprimé au moment de l'exécution, cela pourrait donc échouer.

Cela dit, il s’agit d’un problème courant et il existe de nombreuses approches. Une chose qui pourrait vous sembler plus utile est de créer un composant personnalisé attaché à une classe personnalisée - par exemple, "TextPlaceholder" et de laisser votre concepteur en placer une copie là où il souhaite utiliser du texte dynamique. Ensuite, lors de l'exécution, ce composant peut examiner sa propriété _name , ou d'autres paramètres de composant personnalisés, et créer à partir de ceux-ci un champ de texte de la taille, du contenu, etc. appropriés. C'est juste une façon de l'aborder.

Cela fait un moment que je n'ai pas codé en AS2, mais vous pouvez peut-être utiliser une combinaison de MovieClip.getInstanceAtDepth () et this.getNextHighestDepth () pour trouver la profondeur la plus élevée dans votre film, puis repérez chaque profondeur inférieure jusqu'à ce que getInstanceAtDepth () qui correspond au clip que vous souhaitez remplir avec de nouvelles données.

J'ai également remarqué cet exemple de code dans la documentation AS2.

Le code suivant décrit la profondeur de toutes les occurrences de clip sur la scène:

for (var i in this) {
    if (typeof (this[i]) == "movieclip") {
    trace("movie clip '"+this[i]._name+"' is at depth "+this[i].getDepth());
    }
}

PS: Je sais que vous ne voulez probablement pas entendre cela, mais en AS3, c’est un jeu d'enfant, car vous pouvez simplement parcourir ce jeu d'enfants!

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top