2

我想到了 2 种方法来指代某些视觉元素,例如电影剪辑。所以假设我有 b_mc (name="b") 躺在舞台上的 a_mc 内:第一种方法:

var mc:MovieClip = a_mc.b_mc

第二种方法:

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

我通常使用第一种方法。什么是选择第二种方法的好理由。有时它对我来说似乎没用,因为当动态使用时,命名电影剪辑需要额外的开销。

谢谢 V。

4

3 回答 3

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

于 2012-12-12T14:47:36.683 回答
3

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

于 2012-12-12T17:24:11.623 回答
1

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

for(var i:int = 0;i<numOfMC;i++) {
    theParent.getChildByName("child"+i).doSomething();
}
于 2012-12-12T14:05:29.453 回答