我有 2 个子 swf 被加载到父 swf 中。每个子 swf 加载自己的 XML 文件。当我加载子 swfs 时,我得到一个空值,因为他们还没有加载他们的 XML 文件。我正在使用greensock 的LoaderMax。无论如何,父母是否知道所有子 XML 何时已加载。
问问题
246 次
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 回答