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