在舞台上我有两个名为' 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--一个在舞台上,另一个在容器内,我怎么能单独访问它?
非常感谢!
答案 0 :(得分:0)
是的,container.addChild(mc1)
将mc1
添加到container
。
现在您希望通过点运算符访问mc1
。
请记住,点运算符用于访问对象的成员:属性和方法。 (或变量和函数,或者你想要调用它们)
我确信mc1在容器内部,为什么我仍然只能像在舞台上那样访问它?
点运算符与显示列表的关系无。
仅访问mc1
对于添加了mc1
容器没有任何影响。
在addChild()
上调用container
不会向container
添加与您要添加的孩子同名的属性。这就是你得到错误的原因。
你在这里混淆了两件事:对象和对象的引用(即变量)
mc1
引用一个对象。将该对象传递给addChild()
不会将引用(mc1
)“移动”到任何地方。 mc1
停留在定义的位置。
这就是为什么你感到困惑的原因。
Adobe Flash的设置会自动将子项名称添加为容器的属性。
如果您在Adobe Flash中手动mc1
放置container
,则可以访问container.mc1
,因为Flash IDE会在幕后添加此属性,但如果您通过container.addChild(mc1)
它没有财产。
如果我有两个名字相同的MC--一个在舞台上,另一个在容器内,我怎么能单独访问它?
如果您手动将on放在容器中,则会自动创建属性,因此container.mc1
和mc1
将是不同的对象。
如果通过代码添加它们,则必须为它们指定不同的名称,因为名称的重点是识别对象,这就是它们应该是唯一的原因。如果你有很多相同类型的mcs,你应该使用array
而不是最后带有数字的个别变量(mc1
,mc2
,...)