1

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

但是我的脚本会覆盖除最后一个之外的所有 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 在舞台上。所有其他都是未定义的。

4

1 回答 1

0

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

我认为错误发生在这里:

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

wherethis.getNextHighestDepth()给你一个恒定的高度,因为在这种情况下,“this”总是指同一个对象,并且新的影片剪辑不断替换相同高度上的旧影片剪辑。改为使用_root.getNextHighestDepth()

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

handle=this;
myXML.onLoad = function(success){
  trace(handle); //what you expect
  trace(this); //not what you expect
}
于 2013-05-06T14:41:22.347 回答