在循环中动态创建AS2中的MovieClip

时间:2013-02-18 10:40:23

标签: flash actionscript-2 movieclip

我尝试在每个循环中添加一个MovieClip。

但我的脚本会覆盖除最后一个MC之外的所有MC。

我必须使用AS2

var myXML:XML = new XML();
myXML.ignoreWhite=true;
myXML.load("config.xml");
myXML.onLoad = function(success){

    if (success){
        var images = myXML.firstChild.childNodes;

        for (i = 0; i <  images.length; i++) {
            var imageNumber = i+1;
            var imageValue = images[i].firstChild.nodeValue;
            var imageName = "image"+imageNumber;
            trace(imageName);

            _root.createEmptyMovieClip(imageName, this.getNextHighestDepth());

            trace(imageNumber+": "+imageName + i);

            imageName.loadMovie(imageValue);

            imageName.width=500;
            imageName.height=500;

            _root.imageName.loadMovie(imageValue);


        } // for loop
    } // if success
    trace("________________");
    trace("1: "+image1);
    trace("2: "+image2);    
    trace("3: "+image3);
}

如果我跟踪循环中的MC,它可以工作。 MC正在舞台上。 但如果我在循环外跟踪剪辑,则只有最后一个MC在舞台上。所有其他都未定义。

1 个答案:

答案 0 :(得分:0)

我猜测陷阱是在onLoad函数中使用“this”。如果你尝试在加载器中跟踪“this”,你会发现它不会是你所期望的。加载器的行为与框架上的常规代码不同。

我认为错误发生在这里:

_root.createEmptyMovieClip(imageName, this.getNextHighestDepth());

其中this.getNextHighestDepth()为您提供恒定的高度,因为在这种情况下,“this”始终引用相同的对象,并且新的动画片段将继续替换相同动画片段高度上的旧动画片段。请改用_root.getNextHighestDepth()

如果你真的想在onLoad函数中使用'this',那么将它分配给同一帧上的某个变量但不在onLoad事件中。例如:

handle=this;
myXML.onLoad = function(success){
  trace(handle); //what you expect
  trace(this); //not what you expect
}