0

私は最初の大きなActionscript3Webサイトに取り組んでおり、最適な読み込みシーケンスを決定しようとしています。大規模なWebサイトではファイルサイズはそれほど問題ではなかったため、現在BulkLoaderを使用していますが、他のアプローチも確実に受け入れています。

進行状況を測定する外部アセット{1swf、1 cssファイル、複数の画像}を見つけようとしていますが、ロードされたXMLファイルに依存しているため、それらをグループ化/順序付けする方法を完全に理解できません。

特にサイト構造がXMLファイルから作成されている場合、AS3でのアセットのプログラム初期化とチェーンロードのベストプラクティスは何ですか?

まず第一に、サイト構造ページIDコピー、および画像ファイル名(背景画像とページスライドショー)を含む単一のSWFとXMLファイルをロードしています。私は現在、XMLとCSSファイルを事前に一括ロードしてから、プログラム全体を生成しています。XMLから画像ファイル名を取得してロードする必要がありますが、これは実際には2つの部分からなるプロセスです。このバルクローディングのすべてに対して、どういうわけか単一のプリローダーを作成する方法はありますか?

初期化プロセスに関するいくつかの注意事項:タイムラインには1つのフレームがあり、ステージにはプリローダーのみが存在します。ページとその他の詳細(ナビゲーション、背景画像、スライドショーなど)はすべて、XMLの解析後に新しいオブジェクトとして追加/作成され、プリローダークリップを削除します。これは、すべてを前もってロードするときにプロセッサをいくらか集中的に使用する可能性がありますが、ユーザーがWebサイトをクリックするときに何度もプリロードする必要がなくなります。SWFAddressも実装するので、マスターするにはプリロードシーケンスが重要です。

4

2 に答える 2

0

最終的にAS3QueueLoaderを使用しました。これにより、XMLがロードされた後にアセットをキューに追加でき、それでも1つのプロセスとしてプリロードを維持できました。甘い!

これが誰かに役立つことを願っています。ご不明な点がございましたらお知らせください。

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 に答える
0

これはあなたの質問に答えないかもしれませんが、うまくいけばそれはあなたにとって興味深い読み物です:http ://code.google.com/p/deepsplink/wiki/GettingStarted それはあなたが興味を持っているトピックのいくつかをカバーするディープリンクフレームワークへのスタートガイドですin。(免責事項:私はdeepsplinkの作者です)

于 2010-02-18T09:59:59.340 に答える