Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/81.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 对于循环、阵列和电影剪辑-如何实现动态系统_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 对于循环、阵列和电影剪辑-如何实现动态系统

Actionscript 3 对于循环、阵列和电影剪辑-如何实现动态系统,actionscript-3,flash,Actionscript 3,Flash,我正在制作一个Flash场景,该场景从XML文件中读取内容,以“构建”动画本身 阅读XML没有问题,这很有魅力。我的问题是当我把资产(图像)放到舞台上 我的代码如下: import flash.display.Sprite; import flash.display.Loader; import flash.net.URLRequest; import flash.display.MovieClip; var xmlLoader:URLLoader; var builderXml:XML;

我正在制作一个Flash场景,该场景从XML文件中读取内容,以“构建”动画本身

阅读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);

}
导入flash.display.Sprite;
导入flash.display.Loader;
导入flash.net.URLRequest;
导入flash.display.MovieClip;
var-xmlLoader:URLLoader;
var-builderXml:XML;
var容器:MovieClip=新的MovieClip();
var assetsArray:Array=new Array();
var-bg:Sprite;
stage.addChild(容器);
init();
函数init():void
{
xmlLoader=新的URLLoader();
load(新的URLRequest(“build_me.xml”);
addEventListener(Event.COMPLETE,processXML);
}
函数processXML(e:Event):void{
builderXml=新的XML(e.target.data);
for(var i:int=0;i
我的XML列出了两个资源,一个1280 x 720图像作为背景,另一个是我想要定位的简单徽标,使用设置的x和y坐标

问题是这两个资产都被添加到同一个movieclip中,尽管我正在FOR循环中创建一个新的MC实例

我如何让资产附着到单独的movieclips上,然后将其存储在阵列中(我很确定我在阵列中正确地存储了当前的MC,只是碰巧MC包含2个图像,而不是1个图像)


另外,为什么我不能访问“onImageLoaded”函数中的变量“I”?它位于FOR循环中…

您正在侦听器中使用一个全局变量,并且期望在侦听器实际启动时它不会被更改。监听器是异步的,因此您应该跟踪哪个加载程序触发了
事件。完成
事件,这样您就可以从XML解析步骤中准备的
image
MC中检索到正确的
MC实例,然后才将加载程序的内容填充到其中。有一种方法可以做到这一点,您应该使用的方法与用于检索相应进度条的方法类似。

container.addChild(assetsArray[i][5])
这可以简化为
container.addChild(图像)但实际上我会这样做:
var image=assetsArray[assetsArray.push(newmovieclip())-1]
这样图像就保存了对保存MovieClip实例的数组的引用。另外,为什么您要等待添加加载的资产以使其成为完整事件,它是
加载程序
,因此您可以直接添加它-没有任何麻烦。那么,您有一个数组
AssetArray
。创建另一个包含加载程序的数组,以便索引为
i
的加载程序必须适合索引为
i
的资产。然后在事件侦听器中获取
event.target
,运行
loaders.indexOf()
获取索引,通过该索引获取资产
assetsArray
,然后对该MC执行任何操作。是否要添加
loader.content
?当然,请调用
addChild()
。代码的其余部分可以通过答案中的链接访问。