无法通过引用访问 MC

Posted

技术标签:

【中文标题】无法通过引用访问 MC【英文标题】:Unable to access MCs via references 【发布时间】:2020-04-10 06:35:21 【问题描述】:

我以前用过 AS 2,这是我的第一个 AS 3 项目。 我需要在容器对象中动态添加 MC。 添加它们后,我无法通过直接引用访问它们。我可以使用 getChildByName() 方法来做到这一点,但这很烦人。 另外,我注意到这些实例没有出现在变量面板中,它们的给定名称位于预期的父/子路径中,而是它们都出现在“this”下,它们的导入变量名称。 (在下面的示例中,我在“this”下都显示了“cont”和“mc1”)。 这是我的代码:

var cont:Sprite = new Sprite() ; 
cont.name = "Container" ; 
addChild(cont) ; 

var mc1:MovieClip = new MovieClip() ; 
mc1.name="mc" ; 
cont.addChild(mc1) ;

var ref1 = getChildByName("Container") ; 
trace(ref1.name) ;                // returns "Container"
trace(mc1.parent.name) ;          // returns "Container"
var ref = ref1.getChildByName("mc") ; 
ref.x = 100 ;  
trace(ref.x) ;                       // returns 100
trace(ref1.mc1.x ) ;                  // DOES NOT WORK
trace(Container.mc.name) ;           // DOES NOT WORK

我错过了什么吗? 为什么我无法通过 Container.mc 访问我的子 MC? 谢谢您的帮助, 昆汀

【问题讨论】:

【参考方案1】:

大部分情况下,我在这里得到了这个:Object Members vs Instance Names。

为了通过点符号语法访问子节点,您需要将这些子节点声明为容器对象的成员。类似的东西:

var C:Sprite = new Sprite;
C.name = "Container";
addChild(C);

// Add it also as a member of current context.
this.co = C;

var M:MovieClip = new MovieClip; 
M.name="InnerMC";
C.addChild(M);

// Add it also as a member of C.
C.mc = M;

trace(this.co.name); // Container
trace(this.co.mc.name); // InnerMC

再一次:成员名称与实例名称不同。显示列表层次结构上方的脚本如下:

this (name: ?)
    └ co (name: Container)
        └ mc (name: InnerMC)

【讨论】:

以上是关于无法通过引用访问 MC的主要内容,如果未能解决你的问题,请参考以下文章

Java - 为啥另一个包中的子级无法通过父级引用访问父级的受保护方法?

MC服务器的问题

无法通过浏览器访问 Web 服务

只能通过引用返回变量引用

通过 mc.cores 与 makePSOCKcluster 设置内核?

通过MC地图物品展示图片的方法