2009-12-09 4 views
0

récemment dans un projet configuré à une classe personnalisée Loader comme suit D'abord, je définis mon chargeur comme variabel privéAS3 chargeur de classes meilleures pratiques

private var _myLdr:Loader 

//Then in the constructor 

_myLdr = new Loader();   
_myLdr.contentLoaderInfo.addEventListener(Event.COMPLETE, doneImgLoad); 
_myLdr.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS, loadProgress); 
_myLdr.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR, ioError); 

Et puis finalement quand j'ai besoin de charger un nouvel actif que j'appelle mon exemple du chargeur via une méthode publique

_myLdr.load(new URLRequest ('myswftoLoad.swf')); 

So far so good .... à moins que vous pour afficher votre page en utilisant la version de débogage de FlashPlayer 9,024 auquel cas vous obtenez

ArgumentError: Error #2025: The supplied DisplayObject must be a child of the caller. 
    at flash.display::Loader/_load() 

WTF ??? !! Donc, pour corriger, j'ai besoin d'instancier un nouveau chargeur chaque fois que je charge un nouvel actif. Quelqu'un peut-il me dire quelle méthode serait considérée comme une «meilleure pratique»?

Répondre

0

Une instance Loader peut avoir utmost one child à la fois. Appelez _myLdr.unload(); avant d'émettre les demandes load() suivantes avec la même instance Loader. Cela étant dit, je préférerais créer une nouvelle instance Loader pour chaque chargement (et m'assurer que les instances précédentes sont correctement déchargées lorsqu'elles ne sont plus nécessaires).

+0

J'ai essayé et j'ai toujours ' ArgumentError: Erreur # 2025: Le DisplayObject fourni doit être un enfant de l'appelant. \t à flash.display :: Loader/unload() ' .... bien étrange que je reçois seulement l'erreur avec la version 9.024 du lecteur de débogage et pas la version 10 du lecteur de débogage. L'autre raison de créer une nouvelle instance de Loader chaque fois que vous chargez un asset externe semble contre-intuitive est que je suppose que chaque nouvelle instance de Loader ajoute une petite quantité à la mémoire utilisée par l'application. Dans mon cas, l'application est utilisée dans un réglage de kiosque et j'essaie d'éviter toute fuite de mémoire .... –

+0

Je vais supposer que la meilleure pratique serait de créer une nouvelle instance de Loader (avec des écouteurs associés à chaque fois. Mais aussi pour avoir une méthode de "nettoyage" qui supprime le chargeur de la liste d'affichage ainsi que ses écouteurs –

+0

Ajoutez-vous 'loader.content' à un autre parent? Par défaut, ce sera l'enfant du' Loader 'correspondant. objet qui l'a chargé - et je suppose que la méthode de déchargement pourrait appeler 'loader.remove (loader.content)' et échouera si vous ajoutez loader.content à autre chose. – Amarghosh