元件调用主时间轴里面定义的函数
先说解决方法(以调用主时间轴的gotoAndPlay()函数为例):
//方法1,共N种解决方式,效果都一样
(this.root as MainTimeline).gotoAndPlay(2);
(this.root as Object).gotoAndPlay(2);
(this.root as MovieClip).gotoAndPlay(2);
Object(this.root).gotoAndPlay(2);
MovieClip(this.root).gotoAndPlay(2);
MainTimeline(this.root).gotoAndPlay(2);
//trace(this.root.numChild);
stop();
//方法2
//var test:Object=this.root;
//test.gotoAndPlay(2);
//方法3
//root["gotoAndPlay"](2);
最后说原因:
对于加载的 SWF 文件中的显示对象,root 属性是此 SWF 文件所表示的显示列表树结构部分中的顶级显示对象。 对于代表已加载图像文件的位图对象,root 属性就是位图对象本身。 对于第一个加载的 SWF 文件的主类的实例,root 属性就是显示对象本身。 Stage 对象的 root 属性是 Stage 对象本身。 对于任何未添加到显示列表的显示对象,root 属性设置为 null,除非它已添加到符合以下条件的显示对象容器:不在显示列表中,但属于已加载 SWF 文件中顶级显示对象的子级。
例如,如果您通过调用 Sprite() 构造函数方法创建新的 Sprite 对象,则其 root 属性将为 null,除非您将其添加到显示列表中(或添加到不在显示列表中但属于 SWF 文件中顶级显示对象的子级的显示对象容器中)。
对于加载的 SWF 文件,即使用于加载文件的 Loader 对象未在显示列表中,SWF 文件中的顶级显示对象也会为其本身设置 root 属性。 在 Loader 对象添加为对其设置 root 属性的显示对象的子级前,它不会设置自己的 root 属性。
编译时,元件还没有添加到显示列表里面,这时元件里面的this.root的值是null,还没有给赋值,所以编译出错。。用as符给root强制转换类型为一个非空值,就可以通过编译了。
|
编译通过开始运行时,元件开始显示时,this.root会被赋值实例话,就可以调用主时间轴下得变量和函数了
|
AS3编译比较严格,所以就爆出了错误1061: 调用可能未定义的方法 。之所以提示是“可能未定义的方法”,是因为root是动态类的实例化的因素吧。
个人理解,若有偏差,欢迎指正。
|