0

我正在开发我的第一个大型 Actionscript 3 网站并尝试确定最佳加载顺序。我目前正在使用 BulkLoader,因为文件大小对于较大的网站来说并不是什么大问题,但我绝对愿意接受其他方法。

我试图弄清楚哪些外部资产要测量进度 {1 swf、1 css 文件、多个图像},但由于它们依赖于加载的 XML 文件,因此无法完全弄清楚如何对它们进行分组/排序。

在 AS3 中程序初始化和资产链加载的最佳实践是什么,特别是当站点结构是从 XML 文件创建时?

首先,我正在加载一个 SWF 和一个 XML 文件,其中包含站点结构页面 ID副本图像文件名(背景图像和页面幻灯片)。我目前正在预先批量加载 XML 和 CSS 文件,然后生成整个程序。我必须从 XML 中检索图像文件名,然后加载它们,但这实际上是一个由两部分组成的过程。有没有办法以某种方式为所有这些批量加载创建一个预加载器?

关于我的初始化过程的几点说明:时间轴中有1帧,并且舞台上只有预加载器。页面 + 其他细节(导航、背景图像、幻灯片等)在解析 XML 后都作为新对象添加/创建,然后我删除了预加载器剪辑。在预先加载所有内容时,这可能会占用处理器资源,但可以避免在用户点击网站时一次又一次地预加载。我还将实现 SWFAddress,因此预加载序列对掌握至关重要。

4

2 回答 2

0

这可能无法回答您的问题,但希望对您来说是一本有趣的书:http ://code.google.com/p/deepsplink/wiki/GettingStarted 这是深度链接框架的入门指南,涵盖了您感兴趣的一些主题(免责声明:我是 deepsplink 的作者)

于 2010-02-18T09:59:59.340 回答
0

我最终使用了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)
}
于 2010-02-23T02:00:24.377 回答