2008-11-24 13 views
1

J'ai une liste d'images que j'ai chargées avec la classe Loader, mais j'ai du mal à leur attribuer des noms uniques. J'ai besoin de noms uniques parce que je veux supprimer certaines images après un certain temps. Existe-t-il un moyen d'attribuer un nom ou une balise unique aux chargeurs afin de pouvoir les supprimer plus tard? Merci.AS3 - Comment attribuer des noms ou des étiquettes au chargeur?

est ici une partie de mon code

for (var i = startnum; i < endnum; i++){ 
    var thumb = panels[i][email protected]; 
    var thumb_loader = new Loader(); 
    thumb_loader.load(new URLRequest(thumb)); 
    thumb_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, thumbLoaded); 

    thumb_loader.name = i; 
    thumb_loader.x = (thumb_width + 20)*i; 
} 

J'ai essayé d'utiliser getChildByName dans une autre fonction ..

var myLoader:Loader = getChildByName("1") as Loader; 
myLoader.unload(); 

Mais il me donne Erreur # 1009: Impossible d'accéder à une propriété ou méthode d'un référence d'objet nul.

J'ai essayé de mettre thumb_loader comme variable globale et faire

var myLoader:Loader = thumb_loader.getChildByName("1") as Loader; 

Mais il ne fonctionne toujours pas. Merci.

Répondre

3

Tous les objets d'affichage dans ActionScript 3 ont une propriété de nom. Chaque fois que vous créez un objet Loader, vous pouvez attribuer un nom à lui comme si:

var myLoader:Loader = new Loader(); 
myLoader.name = "myUniqueName"; 
myLoader.load(....); 
addChild(myLoader); 

Si vous souhaitez faire référence au chargeur par le nom que vous avez donné, utilisez la méthode getChildByName().

var myLoader:Loader = getChildByName("myUniqueName") as Loader; 
myLoader.unload(); 

S'il vous plaît être conscient que getChildByName() ne fonctionne après avoir ajouté le chargeur (s) à la liste d'affichage en utilisant addChild(). Sinon, vous devrez créer quelque chose pour stocker les références dans les objets Loader, comme un tableau et faire référence aux chargeurs via ce tableau. Par exemple, en dehors de votre boucle, vous pouvez créer un tableau nommé loadersArr. Dans votre boucle, vous feriez:

loadersArr["uniqueName"] = thumb_loader; 

Ensuite, vous pouvez vous référer à vos chargeurs avec votre nom unique à travers le réseau loadersArr.

var loaderToUnload:Loader = loadersArr["uniqueName"]; 
loaderToUnload.unload(); 

Sans voir plus de votre code, il est difficile de comprendre la portée dans laquelle ce code réside et où tout autre code qui peuvent essayer de référencer ces chargeurs réside.

+0

mais il me donne cette erreur Erreur # 1009: Impossible d'accéder à une propriété ou méthode d'une référence d'objet null. – shibbydoo

+0

Il est difficile de savoir pourquoi vous obtenez cette erreur sans voir votre code. –

+0

J'ai ajouté du code à la question, merci :) – shibbydoo

0

Pas sûr que je comprends 100% votre problème, mais pourquoi ne pas les mettre dans une carte d'objet plutôt que d'une liste et générer des noms uniques pour eux si vous ne les avez pas ...

var img:Image; 
var img_map:Object = new Object(); 
var last_added:int = 0; 
for each (img in yourListOfImages) 
{ 
    img_map["img_"+last_added] = img; 
    last_added++; 
} 

Selon sur votre environnement (Flex ou Flash), vous pouvez utiliser un générateur UID au lieu de mes noms uniques simplistes ci-dessus.

0
package 
{ 
    import flash.display.Loader; 

    public dynamic class DynamicLoader extends Loader 
    { 
     public function DynamicLoader() 
     { 
      super(); 
     } 
    } 
} 

je crois que la classe Loader est une classe scellée si vous voulez créer cette classe et l'utiliser au lieu de la normale classe Loader pour lui donner tout attribut que vous voulez. Je crois aussi que sans utiliser ce DynamicLoader au lieu du Loader normal, la classe Loader a la propriété name à sa disposition.

Questions connexes