AS3:Addchild动态使用不同的标识符名称

时间:2014-08-13 18:49:54

标签: actionscript-3 eval addchild

我目前正在学习as3但是我来自几年的as2经验,所以我以前做的是使用带有数字变量的字符串附加movieclips来获得这样的正确标识符,也许我在考虑使用eval但是当然它在as3中不可用所以这就是我在as2中所做的:

currentlevel=1;
myString = "levelMc"+currentlevel;

然后当然使用" attachMovie"中的构造字符串。功能,以附加正确的剪辑。

attachMovie(myString,myString+mydepth,mydepth);

但是我在as3中看到所有关于类和所有不同的东西所以我似乎无法找到一种方法来为要添加的子项动态获取正确的类名,是否有实际的方法使这成为可能?因为据我所知,我看到我应该获取类名来制作新对象,然后将其放入" addChild"因此,我无法找到一种方法来传递任何类型的动态构造的字符串或元素,在那里引用我需要的剪辑,它仍然可能吗? 预先感谢任何线索=)

编辑我添加了attachmovie调用作为澄清线,我知道你得到了我所要求的但是因为我找不到正确的方法我更愿意澄清。另外我不应该提到" eval"在这里,对不起,我只能用字符串用法问我的as2

编辑解决,感谢你们所有人,你们救了我,我希望我能给你们所有的荣誉,因为你们所有的想法和提示都很棒,真的很有帮助,我把这个答案标记为正确,因为它是领导者我要getDefinitionByName这是我最后要使用的东西,但正如所说的那样,面对新的as3世界的所有提示和想法将对我有很大的帮助,所以我希望我能给你们所有人的声誉,非常感谢=)< / p>

4 个答案:

答案 0 :(得分:0)

您仍然可以为对象设置名称,例如:

var mc : MovieClip;
for (var i : int = 0; i < 5; i++) {
   mc = new MovieClip();
   mc.name = "myMc"+ i;
   addChild(mc);
}

您可以使用以下方式获得特定的孩子:

this["myMc1"] as MovieClip

this["myMc"+ i] as MovieClip;

答案 1 :(得分:0)

一个简单的数组怎么样? 因为如果您只需要以递增的数字方式访问一组级别,这种方法就更容易了。

var levels:Array = new Array();
levels[0] = //your level1 movieclip
levels[1] = //your level2 movieclip
...

function jumpToLevel(index:int):void{
    //remove added levels beforehand
    removeChildren(); //assuming the only children you added to this displaylist 
                      //are levels, otherwise you will need another approach
    addChild(levels[index]);
}

答案 2 :(得分:0)

在AS2中,我们会在实例名称中存储有关实例的信息 - button_0,button_1等。在AS3中,除了保持代码清晰并引用您创建的内容之外,您不需要/使用实例名称。用手。

使用数组引用您的实例。因此,如果您正在制作按钮,则可以创建一个按钮并将其推入一系列按钮。然后将其引用为aMyButtons [i]而不是mcMyButtons [“button_”+ i]

这是示例代码。

function fCreateButtons(): void {
    var i: int = 0;
    for (i = 0; i < 5; i++) {
        var mcNewButton: McButton = new McButton();
        mcNewButton.x = i * 200;
        mcNewButton.iButtonNumber = i;
        mcNewButton.tMain.text = "About Us";
        mcNewButton.bButton.addEventListener(MouseEvent.MOUSE_DOWN, fButtonPress);
        mcNewButton.bButton.addEventListener(MouseEvent.MOUSE_OVER, fButtonOver);
        mcNewButton.bButton.addEventListener(MouseEvent.MOUSE_OUT, fButtonOut);

        aButtons.push(mcNewButton);
        }
    }

function fButtonPress(e: MouseEvent): void {
    var iButtonNumber: int = e.currentTarget.parent.iButtonNumber;
    trace("fButtonPress():  iButtonNumber: " + iButtonNumber);
}

这是您将按钮添加到持有人剪辑并将其删除的方法。

mcButtonsHolder.addChild(aButtons[i]);
mcButtonsHolder.removeChild(aButtons[i]);

答案 3 :(得分:0)

正如我上面说过的那样,我终于使用getDefinitionByName设法解决了这个问题,我认为我可以越接近&#34; eval&#34;,该功能设法将dinamycally形成的类名称用于调用运行时的新剪辑对我来说是完美的,至少使代码更清晰,更容易在需要时更改。正如我在上次编辑中所说,非常感谢所有帮助过的人,所有的提示和想法在as3时间对我很有用,希望我能给你所有声誉,非常感谢=)。