使用引用vs getChildByName()

时间:2012-12-12 13:56:17

标签: actionscript-3

我认为2种方法指的是像movieclip这样的视觉元素。所以假设我在舞台上的a_mc中有b_mc(name =“b”): 第一种方法:

var mc:MovieClip = a_mc.b_mc

第二种方法:

var mc:MovieClip = a_mc.getChildByName("b")

我通常使用第一种方法。有什么理由可以采用第二种方法。它有时对我来说似乎毫无用处,因为它在动态使用时会涉及动画片段命名的额外开销。

由于 诉

3 个答案:

答案 0 :(得分:3)

如果向动画片段动态添加内容,则需要

getChildByName。例如:

var mc1:MovieClip = new MovieClip();
var mc2:MovieClip = new MovieClip();
mc2.name = "foobar";
mc1.addChild(mc2);

trace(mc1.foobar); //undefined
trace(mc1["foobar"]); //undefined
trace(mc1.getChildByName("foobar")); //[object MovieClip]

我通常在引用对象时执行mc1 [“foobar”],因为这样很容易处理mc1 [“foobar_”+ i]等项目;

我很少使用getChildByName,因为每当你尝试传递一些东西作为一个动画片段/文本字段或其他东西时,都需要手动播放:)

但是,如果你确实从flash编辑器创建实例,那么我通常会通过一些导出的类来引用它们并通过它们访问它们 mc1.mc2.mc3.optionsView.visible

答案 1 :(得分:3)

a.getChildByName('b')比获取a.b要慢 如果您不需要使用名称,则使用它是没有意义的,但是一些程序员可能会使用该名称,尤其是在动态生成内容而不是通过Flash IDE时,在这种情况下使用此功能是有帮助的,因此显示列表不必由自定义函数遍历(无论如何它都与内部函数一起运行,因为它比ab慢)

答案 2 :(得分:1)

如果您有一个需要以编程方式完成的对象列表,则getChildByName非常棒。它会假设您还以某种编程方式命名它们以在for循环中重新索引它们。我还可以考虑使用其他一些好方法,例如推送数组中的名称或对象,这样它们就不必相关,只需要有一些共同的属性或方法。

for(var i:int = 0;i<numOfMC;i++) {
    theParent.getChildByName("child"+i).doSomething();
}