0

我从事 ActionScript 3.0 编程,我对此非常了解。我有一个使用 ActionScript 2.0 的项目,但在向舞台添加实例时遇到了一个简单的问题。在 ActionScript 3.0 中,当我想向某个影片剪辑添加多个实例时,首先将它们保存在一个数组中,然后使用该数组设置 X 和 Y 以及宽度和 alpha 以及其他详细信息。

例子:

itemBlock”是我的实例,它是库中导出的影片剪辑。

for ( var i = 0 ; i < 24 ; i++ ) {
blockBANK[i] = new itemBlock(); // itemBlock is an exported movieclip in the library. 
blockBANK[i].x = // some calculation;
blockBANK[i].y = // some other calculation;
mainPage_mc.addChild(blockBANK[i]); // add to the mainPage_mc  holder
}

现在我可以使用这个数组在我的 AS3 代码中的任何地方添加和编辑我的实例。在 AS2 中,我尝试了这些但不工作,也没有编译器错误!

for (var i=0;i<7;i++) { 
    var temp:MovieClip = new MovieClip();
    temp.attachMovie("itemBlock "," itemBlock "+i,0); 
    textboxBANK[i].addChild(temp);
    textboxBANK[i]._y = 40; 
    textboxBANK[i]._x = i * 20; 
    mainPage_mc.addChild(textboxBANK[i]);// add to holder
}

不工作,没有编译器错误

for (var i=0;i<7;i++) { 
    var temp:MovieClip = new MovieClip();
    temp.attachMovie("itemBlock","itemBlock"+i,0); 
    textboxBANK[i].attachMovie(temp);
    textboxBANK[i]._y = 40; 
    textboxBANK[i]._x = i * 20; 
    mainPage_mc.attachMovie(textboxBANK[i]);// add to holder
}

不再工作,也没有编译器错误..

我如何将实例放入数组中并将它们添加到AS2中的该数组的持有者?

4

1 回答 1

1

据我所知,您使用createEmptyMovieClip方法在 AS2 中创建了一个新的 MovieClip。此外,AS2 不支持addChild方法。

AS2 显示列表与 AS3 完全不同。显示对象仅在其在舞台上时才存在(与 AS3 不同,您可以使用存储的 DisplayObject 遍历显示树)。简而言之,如果您尝试将 MovieClips 存储在一个数组中,以便稍后添加到舞台,这是不可能的。

您需要做的就是将它们添加到舞台上,并弄乱它们的 *_visible* 属性。然后让它们在稍后阶段可见。这是一些代码,基于我理解你想要做的......

var tempClips:Array = new Array();

for(var i = 0; i < 10; i++){

    var temp = mainStage.createEmptyMovieClip("temp"+i, mainStage.getNextHighestDepth());

    var temp_inner = temp.attachMovie("exportedLibrarySymbol", "temp_inner", temp.getNextHighestDepth());

    temp._visible = false; //or true if you want them to be seen instantly

    temp._x = someCalculation;
    temp._y = someCalculation;

    tempClips.push(temp);

}

请注意,在 AS2 中,如果您尝试在相同深度的舞台上添加一些东西,则原始显示对象将消失。使用getNextHighestDepth方法来精确计算正确的整数。

更好地描述您正在尝试做的事情将非常有帮助。

于 2012-05-28T12:33:09.900 回答