Je suis un développeur C# qui essaie d'apprendre quelques AS3, donc ça va être une question assez récente. Je suis confus en ce qui concerne la portée et le GC, car j'ai une classe étendue MovieClip (Diapositive) que je crée des instances de dans une boucle et push() dans un tableau, mais par la suite les éléments sont nuls quand je les retire de la collection.La classe AS3 personnalisée est nulle après avoir été ajoutée à Array
var ldr:URLLoader = new URLLoader();
ldr.load(new URLRequest("presentation.xml"));
ldr.addEventListener(
Event.COMPLETE,
function(e:Event):void {
config = new XML(e.target.data);
for (var i:Number = 0; i < config.slides.slide.length(); i++)
{
var node = config.slides.slide[i];
var slide:Slide = new Slide();
slides.push(slide);
addChild(slide); // Works fine
}
}
);
slides.forEach(function(e:*, index:int, array:Array):void
{
addChild(e); // Causes "Parameter child must be non-null" exception
}
);
Je voudrais pouvoir les références diapositives plus tard, afin de les activer au besoin - comment puis-je conserver la référence à mes nouveaux objets?
Mise à jour: Il semble qu'il y ait eu deux problèmes avec ceci. L'appel forEach était en cours avant l'appel de l'événement complet de l'URLLoader, et forEach ne semble pas fonctionner comme prévu. Voici le code de travail final:
var ldr:URLLoader = new URLLoader();
ldr.load(new URLRequest("presentation.xml"));
ldr.addEventListener(
Event.COMPLETE,
function(e:Event):void {
config = new XML(e.target.data);
for (var i:Number = 0; i < config.slides.slide.length(); i++)
{
var node = config.slides.slide[i];
var slide:Slide = new Slide();
slides.push(slide);
}
for each (var sl in slides)
{
addChild(sl);
}
}
);
Mettez un "var" avant la "diapositive dans les diapositives" et je vais vous marquer comme la réponse! – tags2k
Terminé. Désolé, c'est ce qui arrive quand vous essayez d'improviser le codage! : P – ozke