2010-06-15 12 views
2

J'essaie d'ajouter une fonction init() à un MovieClip, mais lorsque j'exécute la fonction de scene1, les variables qui ont été définies dans MovieClip ne sont pas encore définies ... Le MovieClip a été déplacé vers la scène depuis la bibliothèque.Fonction AS3 en cours avant la définition des variables!

scene1:

mc.init(null); 

MovieClip:

var _default = 5; 

function init(num) { 
    if(num == null) { 
      trace(_default); 
    } else { 
      trace(num); 
    } 
} 

Ceci est traçage "non défini" au lieu de "5"; Y a-t-il un moyen de résoudre ce problème?

Répondre

1

Le problème est que tout code placé directement dans le scénario principal sera toujours exécuté avant le code directement dans le MovieClip. Le moyen de contourner ce problème serait de laisser Flash finir d'exécuter ce code dans le scénario et le MovieClip en premier, puis d'appeler la fonction à partir de la chronologie après sa fin.

La meilleure façon de le faire serait d'utiliser un écouteur d'événement:

Timeline:

addEventListener(Event.ENTER_FRAME, onEnterFrame); 

function onEnterFrame(e:Event):void { 
    myObject.init(null); 
    removeEventListener(Event.ENTER_FRAME, onEnterFrame); 
} 

De cette façon, le calendrier attendra jusqu'à ce que la première image a commencé à appeler la fonction d'initialisation de votre MovieClip.