AS3 - 将 MovieClip 移动到容器后访问它

AS3 - Acccessing MovieClip after moving it to container

在舞台上,我有两个名为 'mc1' 和 'container' 的 MovieClip。

当我使用 addChild() 将 'mc1' 放入 'container' 时,我希望它的新父级访问它 - container.mc1

但是,这样的尝试会产生错误。

奇怪的是,我还能正常访问它,好像它还在舞台上,而不是在容器里。

trace(mc1.name); // outputs 'mc1'
container.addChild(mc1); // moves mc1 into container
trace(mc1.name); // outputs 'mc1' (why, it's not there anymore???)
trace(container.mc1.name); // TypeError:
Error #1010: A term is undefined and has no properties.

谁能给我解释一下?我确定 mc1 在容器内,那为什么我仍然只能像在舞台上一样访问它?

如果我有两个同名的 MC - 一个在舞台上,一个在容器内,我如何分别访问它们?

非常感谢!

是的,container.addChild(mc1)mc1 添加到 container

现在您希望通过点运算符访问 mc1。 请记住,点运算符用于访问 object: 属性和方法的成员。 (或变量和函数,或者你想如何称呼它们)

I am sure the mc1 is inside the container, so why i can still only access it as if it was on stage?

点运算符与显示列表没有任何 关系。 仅访问 mc1 对添加到 mc1 的容器没有任何影响。

container 上调用 addChild() 不会将 属性 添加到 container,它与您要添加的 child 同名。这就是您收到错误的原因。


您在这里混淆了两件事:object 和对 object 的引用(即变量)

mc1 引用了 object。将 object 传递给 addChild() 不会 "move" 任何地方的引用 (mc1)。 mc1 保留在定义的位置。


这就是你困惑的原因。

Adobe Flash 有一个设置,可以自动将 children 的名称作为属性添加到容器中。 如果在 Adob​​e Flash 中将 mc1 放在 container "by hand" 中,您将能够访问 container.mc1,因为 Flash IDE 在后面添加了这个 属性场景,但如果您通过 container.addChild(mc1) 添加它,它将不会有 属性.

What if i had two MCs with the same name - one on the stage and one inside the container, how could i access them separately?

如果您手动将 on 放入容器中,属性 将自动创建,因此 container.mc1mc1 将是不同的 object。

如果你通过代码添加它们,你必须给它们不同的名字,因为名字的全部意义在于识别 objects,这就是为什么它们应该是唯一的。如果您有许多相同类型的 mc,则应使用 array 而不是末尾带有数字的单个变量(mc1mc2、...)