儿童swf中的LoaderMax

时间:2013-01-07 21:00:37

标签: xml actionscript-3 flash greensock loadermax

我有2个子swfs被加载到父swf中。每个子swf加载自己的XML文件。当我加载子swfs时,我得到一个null,因为他们还没有加载他们的XML文件。我正在使用greensock的LoaderMax。无论如何,父母都知道何时加载了所有子XML。

1 个答案:

答案 0 :(得分: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处理程序,您可以使用

  

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

Read the docs for more options