2010-03-09 5 views
3

J'essaie de trouver l'événement correct à écouter pour s'assurer que mes paramètres de composants sont disponibles pour l'utilisation afin que je puisse initialiser mon composant.Comment initialiser les composants Flash ActionScript 3 (AS3)?

La plupart des exemples que j'ai vus en ligne utilisent Event.INIT attaché à loaderInfo.

loaderInfo.addEventListener(Event.INIT, initHandler); 

De mon expérience, cet événement ne se déclenche sur la première image du film.

D'autres personnes utilisent Event.COMPLETE, qui se déclenche après Event.INIT, pour s'assurer que le composant et les paramètres sont disponibles. Une fois de plus, l'événement semble se déclencher uniquement sur la première image du film. Cela a du sens car il est attaché à la propriété loaderInfo du composant.

Voici la classe d'un composant très simple qui montre exactement de quoi je parle. Associez cette classe à un MovieClip dans la boîte de dialogue Propriétés et la boîte de dialogue Définition des composants (je ne vais pas vous dire comment créer un composant puisque vous le savez probablement), puis faites glisser le composant résultant sur la scène et réglez la "Test var" paramètre à "TEST_VAR_CHANGED".

Lorsque le rendu du film avec le composant dans la première image que vous verrez:

constructor null 
initHandler TEST_VAR_CHANGED 
completeHandler TEST_VAR_CHANGED 

Lorsque le rendu du film avec le composant dans le deuxième cadre que vous ne verrez:

constructor null 

Alors ... quel événement est-ce que j'écoute pour garantir que les paramètres des composants sont disponibles avant d'exécuter mon gestionnaire init?

classe Component:

package 
{ 
    import flash.display.MovieClip; 
    import flash.events.Event; 

    public class ComponentEventTest extends MovieClip 
    { 
     [Inspectable(name="Test var", type="String")] 
     public var testVar:String;  

     function ComponentEventTest() 
     { 
      trace('constructor', testVar); 
      loaderInfo.addEventListener(Event.INIT, initHandler); 
      loaderInfo.addEventListener(Event.COMPLETE, completeHandler); 
     } 

     private function initHandler(evt:Event):void 
     { 
      loaderInfo.removeEventListener(Event.INIT, initHandler); 
      trace('initHandler', testVar); 
     } 

     private function completeHandler(evt:Event):void 
     { 
      loaderInfo.removeEventListener(Event.COMPLETE, completeHandler); 
      trace('completeHandler', testVar); 
     }   
    } 
} 

Répondre

2

Edit: Ok vous pouvez attendre la première image à rendu:

Écoute de la exit frame si (flash player 10) disponible ou enter frame:

function ComponentEventTest() 
    { 
     trace('constructor', testVar); 
     addEventListener(Event.ENTER_FRAME, initHandler); 
    } 

    private function initHandler(evt:Event):void 
    { 
     removeEventListener(evt.type, initHandler); 
     trace('initHandler', testVar); 
    } 
+0

Merci pour votre réponse. En fait, l'événement ADDED_TO_STAGE se produit avant l'événement INIT et affiche également testVar comme nul. – shawnc

+0

Désolé j'ai oublié que c'était un composant, j'ai éditer la réponse. – Patrick

+0

Merci pour la réponse, mais la page liée est AS2 (AS3 n'existait pas en 2004) et ne résout pas le problème de savoir quand les paramètres du composant sont chargés et l'initialisation du composant peut continuer. Cet exemple suppose simplement que lorsque le constructeur est appelé, vous pouvez procéder avec initting. – shawnc

Questions connexes