1

親swfに2つの子swfがロードされています。各子 swf は、独自の XML ファイルをロードします。子 swfs をロードすると、XML ファイルがまだロードされていないため、null が返されます。greensock の LoaderMax を使用しています。とにかく、すべての子 XML がいつ読み込まれたかを親が知ることはできますか。

4

1 に答える 1

0

子が読み込まれるときに子をカウントするのではなく、子が XML の読み込みを完了したときにカウントしたいようです。最初に、次のような xml をロードするすべての子のクラスを作成することを検討してください。

package  {
    import flash.display.MovieClip;

    public class ChildToLoad extends MovieClip{

        public function ChildToLoad() {
            // Load xml here, optionally use URLLoader or XMLLoader,
            // but regardless of what you use, listen for when XML load 
            // is complete and handle it with the loadComplete() function
            ...
            someXMLLoader.addEventListener(Event.COMPLETE, loadComplete);
            ...
        }

        private function loadComplete(evt:* = null)
        {
            var padre:MovieClip = parent as MovieClip;
            padre.childLoaded(); // Call function of parent
        }
    }
}

次に、メインの swf (親) で次のようにします。

var child1:ChildToLoad = new ChildToLoad();
var child2:ChildToLoad = new ChildToLoad();
addChild(child1);
addChild(child2);

var loadedChildrenCount:int = 0;

function childLoaded() // Called by all children after they load XML
{
    trace("childLoaded()");
    loadedChildrenCount++;

    if(loadedChildrenCount == 2)
    {
        trace("All children have loaded! Do Stuff!");
    }
}

でも; あなたの質問を読みすぎると...

LoaderMax には、onChildComplete使用できるハンドラがあります

ローダーの子 (または任意の子孫) の 1 つが正常にロードを終了するたびにディスパッチされる LoaderEvent.CHILD_COMPLETE イベントのハンドラー関数。onChildComplete 関数がタイプ LoaderEvent (com.greensock.events.LoaderEvent) の単一のパラメーターを受け入れることを確認してください。

次のようなものを試すことができます:

var childrenLoadedCount:int = 0;
var queue:LoaderMax = new LoaderMax({
    onChildComplete:AChildWasLoaded,
    TODO:AddYourOtherArgumentsHere
}); 
...
function AChildWasLoaded(evt:LoaderEvent) 
{
    childrenLoadedCount++;
    if(childrenLoadedCount = 2)
    {
        // All children have loaded
    }
}

その他のオプションについては、ドキュメントを参照してください

于 2013-01-08T05:11:37.837 に答える