Рабочий процесс загрузки AS3: сначала XML, затем несколько ресурсов

Я работаю над своим первым большим веб-сайтом на Actionscript 3 и пытаюсь определить наилучшую последовательность загрузки. В настоящее время я использую BulkLoader, так как размер файла не был большой проблемой для более крупного веб-сайта, но я определенно открыт для других подходов.

Я пытаюсь выяснить, какие внешние активы измерять прогресс {1 swf, 1 файл css, несколько изображений}, но не могу понять, как их группировать/упорядочивать из-за их зависимости от загруженного XML-файла.

Каковы наилучшие методы инициализации программы и последовательной загрузки ресурсов в AS3, особенно когда структура сайта создается из XML-файла?

Прежде всего, я загружаю один файл SWF и файл XML, содержащий структуру сайта, идентификаторы страниц, копию и имена файлов изображений (фоновые изображения, а также слайд-шоу страниц). В настоящее время я загружаю XML и CSS-файл заранее, а затем генерирую всю программу. Мне нужно получить имена файлов изображений из XML, а затем загрузить их, однако на самом деле это процесс, состоящий из двух частей. Есть ли способ как-то создать единый предварительный загрузчик для всей этой массовой загрузки?

Несколько замечаний по поводу моего процесса инициализации: на таймлайне 1 кадр, а на сцене только прелоадер. Страницы + другие детали (навигация, фоновые изображения, слайд-шоу и т. д.) добавляются/создаются как новые объекты после разбора XML, а затем я удаляю клип предварительного загрузчика. Это может несколько нагружать процессор при предварительной загрузке, но избавляет от необходимости выполнять предварительную загрузку снова и снова, когда пользователи просматривают веб-сайт. Я также буду реализовывать SWFAddress, поэтому последовательность предварительной загрузки имеет решающее значение для освоения.


person Marcy Sutton    schedule 18.02.2010    source источник


Ответы (2)


это может не отвечать на ваш вопрос, но, надеюсь, вам будет интересно прочитать: http://code.google.com/p/deepsplink/wiki/GettingStarted – это руководство по началу работы с системой создания глубоких ссылок, которое охватывает некоторые интересующие вас темы. (Отказ от ответственности: я автор deepsplink)

person maxmc    schedule 18.02.2010
comment
Что именно делает deepsplink? Код дает мне несколько грубое представление, но нет вводного языка, чтобы объяснить мне, почему я должен его использовать. Я очень любопытная! - person Marcy Sutton; 22.02.2010
comment
хм, я думал, что code.google.com/p/deepsplink перечисляет преимущества deepsplink. Я не уверен, чего не хватает? - person maxmc; 27.02.2010

В итоге я использовал 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)
}
person Marcy Sutton    schedule 23.02.2010