1

我有 2 个子 swf 被加载到父 swf 中。每个子 swf 加载自己的 XML 文件。当我加载子 swfs 时,我得到一个空值,因为他们还没有加载他们的 XML 文件。我正在使用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你可以使用的处理程序

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 回答