【问题标题】:AS3 - Acccessing MovieClip after moving it to containerAS3 - 将影片剪辑移动到容器后访问它
【发布时间】:2015-06-02 18:41:41
【问题描述】:

在舞台上,我有两个名为“mc1”和“容器”的 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 - 一个在舞台上,一个在容器内,我怎么能分别访问它们?

非常感谢!

【问题讨论】:

    标签: actionscript-3 movieclip addchild


    【解决方案1】:

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

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

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

    点运算符与显示列表没有关系。 仅访问 mc1 不会影响将 mc1 添加到哪个容器。

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


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

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


    这就是你困惑的原因。

    Adobe Flash 有一个设置,可以自动将子级名称作为属性添加到容器中。 如果在 Adob​​e Flash 中“手动”将 mc1 放置在 container 中,您将能够访问 container.mc1,因为 Flash IDE 在后台添加了此属性,但如果您通过 container.addChild(mc1) 添加它,则不会拥有财产。

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-24
      • 2011-03-07
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      相关资源
      最近更新 更多