对象主时间轴,对象阶段和root中的as3有什么区别?

时间:2011-09-03 06:56:12

标签: actionscript-3 actionscript

我想知道as3中[object main timeline][object Stage]root之间的区别?

我已阅读主题How stage, root, and MainTimeline Fit Together。但我没弄清楚。

3 个答案:

答案 0 :(得分:11)

我认为您链接的文章总结得很好(即使它没有很好地解释这一点):

  

总结:一个阶段,每个SWF一个根(这是主要时间轴)   并且该根是文档类或MainTimeline的实例   如果没有提供文档类,则为class

舞台可能是最容易理解的。每个Flash Player有一个阶段 - 将其视为Flash电影所在的窗口。它是最顶层的显示对象 - 屏幕上显示的任何内容都是舞台的孩子。阶段始终是相同的实例,对stage的任何引用都返回相同的值。

Root是特定SWF文件的显示层次结构的逻辑“顶部”。正如文章中所解释的,每个SWF都有自己的root,它指的是该SWF的文档类的实例。

在运行时将一个SWF加载到另一个SWF中时,您可以看到root和stage之间的差异。两个SWF将具有不同的根,但具有相同的阶段。每个SWF中的根将引用它们自己的SWF的最顶层显示对象,这是它们的文档类。

MainTimeline是用于文档类的默认类。文档类是加载SWF影片时添加到舞台的显示对象。在它下面是一个扩展MovieClip的普通类。

文档类是您在Flash编辑器中看到的MovieClip。这是保存时间轴代码和添加时间轴动画的地方。可以使用自定义类覆盖文档类。更改文档类将更改root引用的对象的名称。

就像我被称为“人类”一样,时间轴默认称为“MainTimeline”。如果我的原子在远程传送器中受到损坏而我被改变为不同类型的东西,例如“FreakOfNature”,这类似于将文档更改为不同的类 - 结果是时间线将变为不同类型的东西。

这是一个可以用来说明阶段,根和文档之间关系的测试:

1.创建一个空的FLA文件,并添加以下时间轴代码:

trace("this " + this);
trace("root " + root);
trace("root.parent " + root.parent);
trace("stage " + stage);
trace("parent " + parent);

2.运行FLA并记下输出。请注意,时间轴代码位于扩展名为“MainTimeline”的影片剪辑的类中。这是root引用的同一个实例。 MainTimeline实例的父级是Stage。

this [object MainTimeline]
root [object MainTimeline]
root.parent [object Stage]
stage [object Stage]
parent [object Stage]

3.将文档类设置为您自己的类(例如:“Test”)。请注意,该类实际上不必存在 - Flash将提示您自动创建它。

enter image description here

4.运行FLA并记下新输出。请注意,时间轴代码现在位于不同的类中,该类扩展名为“Test”的影片剪辑。 “Test”是添加到舞台的影片剪辑的类型。

this [object Test]
root [object Test]
root.parent [object Stage]
stage [object Stage]
parent [object Stage]

从中我们可以看到Flash使用名为MainTimeline的默认类作为文档类,除非使用自己的版本覆盖。加载SWF时,文档类的实例(可以是MainTimeline或您自己的类)将添加到舞台中。

答案 1 :(得分:0)

root是影片剪辑的主要(最上面)部分

当您在库中创建对象并对其进行编辑时,您看到的时间轴是object timeline,您看到的阶段是object stage

对象时间轴和阶段独立于主(_root)时间轴

答案 2 :(得分:0)

Root特别不同,因为它似乎没有收到鼠标事件。谁能证实这一点?您可以在根上绘制,向其添加实体对象等等...但是如果向舞台,根和被单击的对象添加侦听器,您将发现该事件绕过根。似乎即使根位于舞台和显示层次结构中的所有其他对象之间,所有事件在冒泡时都会跳过它。