2010-01-12 5 views
2

J'ai un parent SWF (parent) qui gère la navigation de l'utilisateur entre plusieurs enfants SWF (Child_1, Child_2, Child_3). Comment ajouter des écouteurs d'événement aux boutons de navigation des fichiers SWF enfants afin que l'utilisateur puisse se déplacer latéralement entre Child_1, Child_2 et Child_3?AS3: Comment ajouter des écouteurs d'événement à des objets dans des fichiers SWF que je charge dynamiquement?

je peux penser à deux options, mais ne peut pas obtenir l'un au travail:

1) Le parent SWF met en place les écouteurs d'événements quand il charge un enfant. Donc, j'utilise un chargeur sur Parent pour charger Child_1 et dans Parent, ajoutez eventlisteners à Child_1.myNavigationform.myButton.

Le problème ici est que le parent ne transmet que l'instance du chargeur et je ne peux pas penser à la façon dont il descendrait jusqu'aux objets individuels dans Child_1.

2) Child_1 ajoute les écouteurs d'événement à ses propres objets. Cela inverse juste le problème. Child_1 n'a aucun problème pour accéder à ses propres boutons, mais lorsqu'un utilisateur clique dessus, il n'a aucun moyen d'accéder aux méthodes sur parent afin que Child_2 puisse être chargé.

Quelle est la solution ici? Je suis sûr que cela est fait fréquemment, je n'ai juste rien vu là-bas qui explique comment gérer cela.

Merci.

Répondre

2

Vous pouvez y aller avec les deux. Mais le premier est plus flexible car il fournit des films parents et enfants faiblement couplés. vous pouvez obtenir le MovieClip enfant via le contentloaderinfo.

_child1loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete); 
_child1loader.load(child1URLRequest); 
function onComplete(e:Event):void { 
    _child1movie = MovieClip(e.target.content); 
} 
Maintenant, vous pouvez ajouter ceci à votre film parent et appeler ses fonctions, ajouter des écouteurs à ses composants.
Dans le second cas, si vous souhaitez accéder à la fonctionnalité de film parent, vous devez l'insérer dans les films de votre enfant. (par exemple, parent.somefunction();).
Et une implémentation bien meilleure serait dans laquelle chaque film enfant donne une certaine fonctionnalité via des événements de répartition (c'est-à-dire, navigable, etc. qui peut être utilisé par des films chargeurs, c'est-à-dire dans ce cas un film parent). Donc, dans ce cas, la mise en œuvre irait comme.
public class Child1 extends MovieClip { 
    ... 
    private function onSomeButtonPressWhichWillAskParentToGoToNextChild():void { 
    dispatchEvent(new Event("navigateNext")); 
    } 
    ... 
} 
... 
public class Parent extends MovieClip{ 
... 
_child1movie.addEventListener("navigateNext", onNavigateNext); 
private function onNavigateNext(e:Event):void { 
//e.target is _child1movie, so you can play with it (hide it or throw it away etc...) 
//do actual naigation 
} 
... 
}