2011-04-08 115 views
0

我正在通過XML文件加載swf的。我希望它們按照它們出現在XML中的順序添加到舞臺上。我遇到的問題是,只有當它們完全加載時纔會將它們添加到舞臺上。外部加載的Swf的順序

任何想法,我可以解決這個問題。


這是我的XML(_config.xml)

<campaign> 
     <component SWFsource="logo.swf"/> 
     <component SWFsource="gallery.swf"/> 
     <component SWFsource="video.swf"/> 
     <component SWFsource="poll.swf"/> 
     <component SWFsource="facebook.swf"/> 
    </campaign> 

我的AS3代碼

var loaders:Array = []; // an Array of loaders instead of a single loader 
var xml:XML; 
var xmlList:XMLList; 
var xmlLoader:URLLoader = new URLLoader(); 

xmlLoader.load(new URLRequest("components.xml")); 
xmlLoader.addEventListener(Event.COMPLETE, xmlLoaded); 

function xmlLoaded(event:Event):void 
{ 
    xml = XML(event.target.data); 
    xmlList = xml.children(); 
    for (var i:int = 0; i < xmlList.length(); i++) 
    { 
     var swfLoader:Loader = new Loader(); // local instead of member variable 
     swfLoader.load(new URLRequest(xmlList[i][email protected])); 
     swfLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler); 
    } 
} 

function loaderInitHandler(event:Event):void 
{ 
    var swfInfo:LoaderInfo = event.target as LoaderInfo; 
    var swfLoader:Loader = swfInfo.loader; 
    if (loaders.length > 0) { 
     var lastLoader : Loader = loaders[loaders.length-1]; 
     swfLoader.y = lastLoader.y + lastLoader.height + 10; // positioning happens here 
    } 
    addChild(swfLoader); 
    loaders.push(swfLoader); 
} 

回答

0

既然你無法控制它的主權財富基金將被載入您將有秩序到:

等到他們是全部加載然後以期望的順序將它們添加到階段

2

你可以做的是在創建它們後立即將Loaders添加到舞臺上,即使它們的內容尚未加載。這樣,加載的內容就會按照它們在XML文件中出現的順序進行堆疊。

{ 
    var swfLoader:Loader = new Loader(); // local instead of member variable 
    swfLoader.load(new URLRequest(xmlList[i][email protected])); 
    swfLoader.contentLoaderInfo.addEventListener(Event.INIT, loaderInitHandler); 
    addChild(swfLoader); 
} 
+0

你也可以把定位信息放在xml中 – jolyonruss 2011-04-08 14:48:34