AS3 Рабочий процесс загрузки: сначала XML, затем несколько активов - PullRequest
0 голосов
/ 18 февраля 2010

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 23 февраля 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)
}
0 голосов
/ 18 февраля 2010

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

...