AS3 - 将MovieClip移动到容器后进行操作

时间:2015-03-29 20:34:59

标签: actionscript-3 movieclip addchild

在舞台上我有两个名为' mc1'的电影剪辑。和'容器'。

当我把' mc1'在容器里面#39;使用addChild(),我希望通过它的新父 - 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--一个在舞台上,另一个在容器内,我怎么能单独访问它?

非常感谢!

1 个答案:

答案 0 :(得分:0)

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

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

  

我确信mc1在容器内部,为什么我仍然只能像在舞台上那样访问它?

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

addChild()上调用container不会向container添加与您要添加的孩子同名的属性。这就是你得到错误的原因。


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

mc1引用一个对象。将该对象传递给addChild()不会将引用(mc1)“移动”到任何地方。 mc1停留在定义的位置。


这就是为什么你感到困惑的原因。

Adob​​e Flash的设置会自动将子项名称添加为容器的属性。 如果您在Adobe Flash中手动mc1放置container,则可以访问container.mc1,因为Flash IDE会在幕后添加此属性,但如果您通过container.addChild(mc1)它没有财产。

  

如果我有两个名字相同的MC--一个在舞台上,另一个在容器内,我怎么能单独访问它?

如果您手动将on放在容器中,则会自动创建属性,因此container.mc1mc1将是不同的对象。

如果通过代码添加它们,则必须为它们指定不同的名称,因为名称的重点是识别对象,这就是它们应该是唯一的原因。如果你有很多相同类型的mcs,你应该使用array而不是最后带有数字的个别变量(mc1mc2,...)