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 的名称作为属性添加到容器中。
如果在 Adobe 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.mc1
和 mc1
将是不同的 object。
如果你通过代码添加它们,你必须给它们不同的名字,因为名字的全部意义在于识别 objects,这就是为什么它们应该是唯一的。如果您有许多相同类型的 mc,则应使用 array
而不是末尾带有数字的单个变量(mc1
、mc2
、...)
在舞台上,我有两个名为 '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 的名称作为属性添加到容器中。
如果在 Adobe 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.mc1
和 mc1
将是不同的 object。
如果你通过代码添加它们,你必须给它们不同的名字,因为名字的全部意义在于识别 objects,这就是为什么它们应该是唯一的。如果您有许多相同类型的 mc,则应使用 array
而不是末尾带有数字的单个变量(mc1
、mc2
、...)