1

私は AS3 を学ぼうとしている C# 開発者なので、これはかなり初心者の質問になります。

ループ内でインスタンスを作成し、配列に push() するカスタム MovieClip 拡張クラス (Slide) があるため、スコープと GC に関して混乱していますが、その後、アイテムをプルすると null になります。コレクションから。

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

必要に応じてスライドを切り替えるために、後でスライドを参照できるようにしたいのですが、新しいオブジェクトへの参照を保持するにはどうすればよいですか?

更新:これには 2 つの問題があったようです。URLLoader の complete イベントが呼び出される前に forEach 呼び出しが行われており、forEach が期待どおりに機能していないようです。最終的な作業コードは次のとおりです。

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

2 に答える 2

3

イベントが発生する前に、slides.forEach 呼び出しが実行されているため、slides 配列には値がありません。

于 2009-05-16T15:45:44.710 に答える