我正在通过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);
}
答案 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的加载顺序,因此您必须:
等到全部加载,然后然后按所需顺序将它们添加到舞台。