MovieClip(root)不起作用。如何从movieclip访问root变量? Flash AS3

时间:2012-09-25 19:37:37

标签: actionscript-3 flash

好的我有一个简单的flash文件,因为我试图完成从影片剪辑中的主舞台访问变量。我从谷歌找到的所有东西都指向MovieClip(root)。但它不适合我。

在主时间轴上:

var MyName:String;
MyName = "kenny";

然后我有一个名为MyBox的movieclip,其代码为:

trace(MovieClip(root).MyName);

我收到此错误:TypeError:错误#1034:类型强制失败:无法将flash.display :: Stage @ 2d2df089转换为flash.display.MovieClip。     在MyBox / sendpmtext()

我也尝试过MovieClip(父级),MovieClip(parent.parent),MovieClip(舞台),MovieClip(this.stage)而且没有运气。有什么帮助吗?

2 个答案:

答案 0 :(得分:3)

你可以做到

parent["MyName"];

OR,主时间轴的正确转换(在您的上下文中,父类型为MainTimeline):

MainTimeline(parent).MyName;

父级始终为DisplayObjectContainer,它没有您创建的特殊属性。如果您创建自定义属性,则需要先转换为具有这些自定义属性的类,然后才能按名称访问它们。 (编译器否则不知道它们存在,并为您提供该错误。)

root指的是瑞士法郎最顶级的舞台。您的主时间轴实际上是舞台的孩子,因此主时间轴上的vars / objects / methods不属于stage

的一部分

如果您使用stage.addChild(MyBox),则stage是父级,而不是主时间轴。如果由于某种原因你需要将stage作为父级,那么你必须在可以访问的地方保留对mainTimeline的引用。您可以在MyBox时间轴中创建一个var来执行此操作。

var mainTimeline:MainTimeline;

然后在主时间轴代码中,执行以下操作:

MyBox.mainTimeline = this;

然后,您可以通过mainTimeline.MyName;

访问MyBox中的var

答案 1 :(得分:0)

StageDisplayObject,但不是MovieClip。尝试使用强制

DisplayObject(stage)

DisplayObjectContainer(stage)

并访问自定义属性:

DisplayObject(this)["MyName"]