[英]AS3 Loading Workflow: XML First, then Multiple Assets
我正在第一个大型Actionscript 3网站上工作,并试图确定最佳的加载顺序。 我目前正在使用BulkLoader,因为文件大小对于较大的网站来说并不是什么大问题,但是我绝对可以接受其他方法。
我正在尝试找出哪些外部资产来衡量进度{1 swf,1 css文件,多个图像},但是由于它们对已加载的XML文件的依赖性,因此无法完全弄清楚如何对它们进行分组/排序。
在AS3中进行程序初始化和资产链式加载的最佳实践是什么,特别是从XML文件创建站点结构时?
首先,我要加载一个SWF文件和一个XML文件,其中包含站点结构 , page-id , copy和图像文件名 (背景图像以及页面幻灯片)。 我目前正在预先批量加载XML和CSS文件,然后生成整个程序。 我必须从XML中检索图像文件名,然后加载它们,但这实际上是一个分为两部分的过程。 是否有办法为所有这种批量装载创建单个预装载器?
关于初始化过程的一些注意事项:时间轴中有1帧,并且舞台上仅存在预加载器。 在解析XML之后,页面和其他详细信息(导航,背景图像,幻灯片等)都作为新对象添加/创建,然后删除预加载器剪辑。 预先加载所有内容时,这可能会占用大量处理器,但是可以防止在用户单击网站时一次又一次地预加载。 我还将实现SWFAddress,因此预加载顺序对于掌握至关重要。
这可能不会回答您的问题,但希望它对您有帮助: http : //code.google.com/p/deepsplink/wiki/GettingStarted这是深度链接框架的入门指南,其中涵盖了您感兴趣的一些主题in。(免责声明:我是deepsplink的作者)
我最终使用了AS3 QueueLoader ,它使我能够在XML加载后将资产添加到队列中,并且仍然将预加载作为一个进程进行。 甜!
希望对您有所帮助。 如果您有任何疑问,请告诉我!
这是一些在XML加载后将图像添加到队列的代码(省略了许多详细信息):
private function init():void {
_oLoader = new QueueLoader();
_oLoader.addItem(PATH+cssURL, css, {title:'cssContent'});
_oLoader.addItem(PATH+"xml/copy.xml", pageXML, {title:'pageXML'});
_oLoader.addEventListener(QueueLoaderEvent.ITEM_PROGRESS, onItemProgress, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.ITEM_COMPLETE, onItemComplete, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.QUEUE_PROGRESS, onQueueProgress, false, 0, true);
_oLoader.addEventListener(QueueLoaderEvent.QUEUE_COMPLETE, onQueueComplete, false, 0, true);
_oLoader.execute();
}
private function onItemComplete(evt:QueueLoaderEvent):void {
if (evt.title == 'cssContent') {
css = StyleSheet(evt.content);
}
if(evt.title == 'pageXML'){
pageXML = XML(evt.content);
processXML(); // creates page objects based on XML
for(var i:int=0; i<pageXML.PARENT.length(); i++){
//loops through XML for background images and adds them to various
//sprite layers for simple turning on and off
numSubPages = pageXML.PARENT[i].PAGE.length();
var pageImgHolder = new Sprite();
pageImgHolder.name = 'page'+i;
pageImgHolder.x = 0; pageImgHolder.y = 0;
bgImgHolder_mc.addChild(pageImgHolder);
for(var j:int=0; j<numSubPages; j++){
if(String(pageXML.PARENT[i].PAGE[j].@IMAGE) !== ''){
bgImg = new Sprite();
bgImg.name = 'page'+i+'img'+j;
bgImg.alpha = 0;
pageImgHolder.addChild(bgImg);
_oLoader.addItem(PATH+'images/'+pageXML.PARENT[i].PAGE[j].@IMAGE, bgImg, {title:'page'+i+'img'+j})
trace(pageImgHolder.parent.name+'/'+bgImg.parent.name+'/'+bgImg.name+' = '+pageXML.PARENT[i].PAGE[j].@IMAGE);
}
}
}
xmlLoaded = true;
}
}
private function onQueueComplete(evt:QueueLoaderEvent):void {
trace("** "+evt.type);
imgHolderLoaded = true;
Preloader.instance.spinnerDone();
startMovie();
bgImgHolder_mc.turnOnImg(0, 0);
//turns on image for page 0, subpage 0 (i have a very complicated architecture)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.