令人困惑的“设计时实例名称”与“动态添加的实例名称”与“相关类中的变量名称”的混淆行为

时间:2011-11-04 03:54:41

标签: flash actionscript-3

假设我有一个名为a_Mc(ClassA)的动画片段。

我有一个名为b_Mc(ClassB)

的子动画片段

案例1:访问a_Mc动画片段中已存在的子动画片段b_Mc

(因为Flash IDE具有“自动实例命名”关闭)

ClassA提到b_Mc的名称为=> var b_Mc:MovieClip;

注意:变量名必须与舞台上实例的名称相同。

所以我可以访问它:trace( a_Mc.b_Mc);


案例2:动态添加后,访问子动画片段b_Mc

var b_Mc:ClassB = new ClassB();
b_Mc.name = "someName" ;
a_Mc.addChild(b_Mc) ;

所以我可以访问它:trace( a_Mc.getChildByName("someName"));


我想明白,为什么有这样的实现差异,相反事情必须相似。 Flash播放器如何管理“现有实例名称”,“动态添加实例名称”和“在相关类中使用的变量名称来表示这些实例名称”?

由于 Vishwas。

1 个答案:

答案 0 :(得分:0)

你实际上在做两件事。

如果案例1 b_Mc是A类中包含的变量 如果2 b_Mca_Mc MovieClip显示列表的子项。

因此,在案例2中,您只需执行b_Mc即可访问trace(b_Mc);。由于变量是在课堂外创建的,因此您不必经历a_Mc

作为显示列表子项(案例2)和作为对象的成员变量(案例1)之间存在差异。

如果你想动态创建子动画片段,你可以这样做:

var newB:ClassB = new ClassB();
a_Mc.b_Mc = newB;

您可以将新剪辑分配给A类中的b_Mc变量。
然后你可以像在案例1中那样访问它:

trace(a_Mc.b_Mc);

您还可以在A类中创建b_Mc并直接将其分配给b_Mc变量:

// inside Class A
b_Mc = new ClassB();

// outside Class A
trace(a_Mc.b_Mc);

请注意,所有这些都与b_Mc是否是A的显示列表的子项无关,或者是否显示在显示列表上。