好的,我有一个简单的flash文件,因为我试图从电影剪辑的主舞台访问一个变量。我在谷歌上找到的所有东西都指向MovieClip(root)。但这对我不起作用。
在主时间线上:
var MyName:String;
MyName = "kenny";
然后我有一个名为MyBox的电影剪辑,它的代码:
trace(MovieClip(root).MyName);
我得到了这个错误:类型错误:错误#1034:类型强制失败:无法转换闪存。显示::Stage@2d2df089到flash.display.MovieClip。在MyBox/sendpmtext()
我也尝试过MovieClip(parent),MovieClip[parent.parent],MovieClip(stage),Movie Clip(this.stage)但没有成功。请帮忙吗?
您可以直接执行
parent["MyName"];
或者,主时间线的适当铸造(在您的上下文中,父级是MainTimeline类型):
MainTimeline(parent).MyName;
父对象始终是DisplayObjectContainer
,它没有您创建的特殊属性。如果创建自定义属性,则需要强制转换为具有这些自定义属性的类,然后才能按名称访问它们。(否则编译器不知道它们的存在,并向您提供该错误)。
root
指的是swf的最高阶段。您的主时间线实际上是stage的子级,因此主时间线上的vars/对象/方法不是stage
的一部分
如果使用stage.addChild(MyBox)
,则stage
是父时间线,而不是主时间线。如果出于某种原因,你需要将stage作为父级,那么你必须在可以访问的地方保留对mainTimeline的引用。您可以在MyBox时间轴中创建一个var来完成此操作。
var mainTimeline:MainTimeline;
然后在主时间线代码中,执行以下操作:
MyBox.mainTimeline = this;
然后,您可以通过执行mainTimeline.MyName;
在MyBox中访问您的var
Stage
是DisplayObject
,但不是MovieClip
。尝试使用强制
DisplayObject(stage)
或
DisplayObjectContainer(stage)
和访问自定义属性:
DisplayObject(this)["MyName"]