Domanda

Sono uno sviluppatore C # che sta cercando di imparare un po 'AS3, quindi questo sta per essere una domanda abbastanza newbie.

mi sto confuso per quanto riguarda il campo di applicazione e GC, come ho una MovieClip personalizzato-estensione di classe (diapositive), che creo istanze di all'interno di un ciclo e push () in un array, ma poi le voci sono nulla quando io li tiro fuori della collezione.

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
    }
);

Mi piacerebbe essere in grado di riferimenti le diapositive in seguito, al fine di attivare in base alle necessità -? Come posso mantenere il riferimento ai miei nuovi oggetti

Aggiornamento: Sembra che ci sono stati due problemi con questo. La chiamata forEach era stato fatto prima dell'evento completa al URLLoader è stato chiamato, e anche forEach non sembra funzionare come previsto. Ecco il codice finale di lavoro:

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);
        }
    }
);
È stato utile?

Soluzione

Prova questo. Vediamo se si ripercorre le diapositive.

var ldr:URLLoader = new URLLoader();
ldr.addEventListener(Event.COMPLETE, processXML);
ldr.load(new URLRequest("presentation.xml"));

function processXML(e:Event):void {
    config = new XML(e.target.data);
    var slide:Slide;
    for (var i:Number = 0; i < config.slides.slide.length(); i++)
    {
        var node = config.slides.slide[i];
        slide = new Slide();                                          
        slides.push(slide);

        addChild(slide); // Works fine
    }

    for each(var slide:Slide in slides){
        trace(slide);
    }
 }

sto codifica qui quindi non posso garantire che funzionerà. Inoltre, non ho il resto del codice quindi dovrete mettere alla prova da soli.

Altri suggerimenti

La chiamata slides.forEach sta eseguendo prima che l'evento è stato licenziato quindi l'array diapositive non ha valori.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top