代码之家  ›  专栏  ›  技术社区  ›  Marcy Sutton

AS3加载工作流:首先是XML,然后是多个资产

  •  0
  • Marcy Sutton  · 技术社区  · 15 年前

    我正在我的第一个大型操作脚本3网站上工作,并试图决定最佳加载顺序。我目前正在使用Bulkloader,因为对于一个更大的网站来说,文件大小并不是什么问题,但我绝对愿意使用其他方法。

    我正在尝试找出哪些外部资产可以测量进度1 SWF、1 CSS文件、多个图像,但由于它们依赖于加载的XML文件,因此无法很好地确定如何对它们进行分组/排序。

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

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

    关于初始化过程的一些注意事项:时间线中有1个帧,并且阶段上只存在预加载程序。页面+其他细节(导航、背景图像、幻灯片等)都是在解析XML后作为新对象添加/创建的,然后我删除预加载程序剪辑。当预先加载所有内容时,这可能会占用一定的处理器空间,但在用户点击网站时,这会避免反复加载。我还将实现swfaddress,因此预加载顺序对掌握至关重要。

    2 回复  |  直到 15 年前
        1
  •  0
  •   maxmc    15 年前

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

        2
  •  0
  •   Marcy Sutton    15 年前

    我最后用了 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)
    }