2013-01-07 27 views
1

我有2個子swf被加載到父swf中。每個孩子swf加載它自己的XML文件。當我加載子swf時,我得到一個null,因爲他們還沒有加載他們的XML文件。我正在使用Greensock的LoaderMax。無論如何父母知道何時加載了所有子XML。LoaderMax在子swf

回答

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

相關問題