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 个资产,一个用于背景的 1280 x 720 图像,另一个是我想要定位的简单徽标,使用设置的 x 和 y 坐标。

问题是这两个资产都被添加到同一个影片剪辑中,尽管我在 FOR 循环内创建了一个新的 MC 实例。

我怎样才能让资产遵守单独的影片剪辑,然后我可以将其存储在数组中(很确定我将当前的 MC 正确存储在数组中,只是碰巧 MC 包含 2 个图像,而不是 1 个)

另外,为什么我无法访问“onImageLoaded”函数中的变量“i”?它位于 FOR 循环内...

4

1 回答 1

0

您在侦听器中使用全局变量,并期望在侦听器实际触发时不会更改它。侦听器是异步的,因此您应该跟踪哪些加载器触发了一个Event.COMPLETE事件,以便您可以image从 XML 解析步骤中准备的那些中检索正确的 MC 实例,然后才将加载器的内容填充到其中。我的答案有一种方法可以做到这一点,您应该使用的方法类似于用于在那边检索相应进度条的方法。

于 2013-03-26T10:36:36.723 回答