外部加载Swf的顺序

时间:2011-04-08 10:58:27

标签: xml flash actionscript-3

我正在通过XML文件加载swf。我希望它们按照它们在XML中出现的顺序添加到舞台上。我遇到的问题是它们只有在满载时才被添加到舞台上。

任何想法如何解决这个问题。


这是我的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].@SWFsource));
        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);
}

2 个答案:

答案 0 :(得分:2)

您可以做的是在创建它们之后立即将加载器添加到舞台,即使它们的内容尚未加载。这样,加载的内容最终按照它们在XML文件中出现的顺序堆叠。

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

答案 1 :(得分:0)

由于您无法控制SWF的加载顺序,因此您必须:

等到全部加载,然后然后按所需顺序将它们添加到舞台