0

私は、XML ファイルから読み取ってアニメーション自体を「構築」する Flash シーンに取り組んでいます。

XML の読み取りは問題なく、魅力的に機能します。私の問題は、アセット (画像) をステージに配置するときです。

私のコードは以下の通りです:

import flash.display.Sprite;
import flash.display.Loader;
import flash.net.URLRequest;
import flash.display.MovieClip;

var xmlLoader:URLLoader;
var builderXml:XML;

var container:MovieClip = new MovieClip();
var assetsArray:Array = new Array();

var bg:Sprite;

stage.addChild(container);

init();

function init():void
{
    xmlLoader = new URLLoader();
    xmlLoader.load(new URLRequest("build_me.xml"));
    xmlLoader.addEventListener(Event.COMPLETE, processXML);
}

function processXML(e:Event):void {
    builderXml = new XML(e.target.data);

    for (var i:int = 0; i < builderXml.assets.*.length(); i++){
        var image:MovieClip = new MovieClip();
        var assetArray:Array = new Array();

        image.x = builderXml.assets.asset[i].start.position.x;
        image.y = builderXml.assets.asset[i].start.position.y;

        trace(image.x);

        assetArray.push(builderXml.assets.asset[i].source);
        assetArray.push(builderXml.assets.asset[i].start.scale);
        assetArray.push(builderXml.assets.asset[i].start.position.x);
        assetArray.push(builderXml.assets.asset[i].start.position.y);
        assetArray.push(builderXml.assets.asset[i].start.rotation);
        assetArray.push(image);

        assetsArray.push(assetArray);

        var lc:LoaderContext = new LoaderContext();
        lc.checkPolicyFile = false;

        var loader = new Loader();
        loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onImageLoaded);

        var _myURLRequest = new URLRequest(builderXml.assets.asset[i].source);
        loader.load(_myURLRequest, lc);

        function onImageLoaded(e:Event):void
        {
            loader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onImageLoaded);
            image.addChild(e.target.content);
        }

        container.addChild(assetsArray[i][5]);
    }
    trace(assetsArray);

}

私の XML には 2 つのアセットがリストされています。1 つは背景用の 1280 x 720 の画像で、もう 1 つはセットの x 座標と y 座標を使用して配置したい単純なロゴです。

問題は、FOR ループ内で新しい MC インスタンスを作成しているにもかかわらず、両方のアセットが同じムービークリップに追加されていることです。

アセットを個別のムービークリップに準拠させて配列に保存するにはどうすればよいですか (現在の MC を配列に適切に保存していることは確かですが、たまたま MC に 1 枚ではなく 2 つの画像が含まれています)。

また、「onImageLoaded」関数内の変数「i」にアクセスできないのはなぜですか? FORループの中にあります...

4

1 に答える 1

0

リスナー内でグローバル変数を使用しており、リスナーが実際に起動するときに変更されないことを期待しています。リスナーは非同期であるため、どのローダーがイベントを起動したかを追跡して、XML 解析ステップで準備されたものから MCEvent.COMPLETEの正しいインスタンスを取得し、ローダーのコンテンツをその中に詰め込むことができるようにする必要があります。この私の答えには、まさにそれを行う方法があります。使用する方法は、対応するプログレスバーを取得するために使用する方法と似ています。image

于 2013-03-26T10:36:36.723 に答える