打印本文 打印本文 关闭窗口 关闭窗口
[root,global,level,depth] 解析
作者:武汉SEO闵涛  文章来源:敏韬网  点击数854  更新时间:2004/3/14  文章录入:mintao  责任编辑:mintao

[root,global], [level,depth,]全解析
By snow(http://www.7dev.net) 参考了old9同志的意见和自在幻想(Fictiony的帖子)

帮助中_global的说明

 标识符;创建全局变量、对象或类。
例如,您可以创建公开为全局动作脚本对象的库,此库非常类似于 Math 或 Date 对象。与时间轴声明或局部声明的变量和函数不一样,全局变量和函数只要未被内部范围中具有相同名称的标识符遮蔽,则它们对于 SWF 文件中的每个时间轴和范围均是可见的。

 _root的说明

属性;指定或返回指向根影片时间轴的引用。
如果影片有多个级别,则根影片时间轴位于包含当前正在执行脚本的级别上。
例如,如果级别 1 中的脚本计算 _root,则返回 _level1。  

_level的说明

标识符;对 _levelN 的根时间轴的引用。
必须在使用 loadMovieNum() 将 SWF 文件加载到 Flash Player 中以后,才可使用 _level 属性来定位这些 SWF。还可使用 _levelN 来定位由 N 所指定级别处的已加载 SWF 文件。  
 加载到 Flash Player 实例中的初始 SWF 文件会自动加载到 _level0。_level0 中的 SWF 文件为所有随后加载的 SWF 文件设置帧频、背景色和帧大小。然后 SWF 文件堆叠在处于 _level0 的 SWF 文件之上的更高编号级别中。  
您必须为每个使用 loadMovieNum() 加载到 Flash Player 中的 SWF 文件分配一个级别。您可按任意顺序分配级别。如果您分配的级别(包括 _level0)中已经包含 SWF 文件,则处于该级别的 SWF 文件将被卸载并替换为新的 SWF 文件。

depth的说明(by snow,非官方文档)

depth值特指MC的深度,depth越大,MC越在上面;制作动画时画出来的MC它的depth值一定小于0,而SWF运行时动态产生的MC的depth值则一定大于0,从而保证了ActionScript操纵而产生的MC位置是在上面的;    

_root和_level

新建一个影片,它的_root就是它本身的根影片时间轴,运行时它所在的层级是level0,可以载入其他的影片到其他层级;如level1等,这些影片会同时运行, 仔细看上面level的说明,"将 SWF 文件加载到 Flash Player 中以后,才可使用 _level 属性来定位这些 SWF",注意"定位"这个词,曾经有人打过一个形象的比方,层级就象并排从上到下的许多抽屉,层级(level)值越大的动画越在上面;对于某个MC而言,它的"最高级领导"就是_root,_level根本不是对MC谈论的概念, 它只表明了SWF之间的上下关系,好,趁热打铁,我们来看下面---------  

_level和Depth

不同点
level和depth根本不具有可比性,level是针对SWF,而depth是针对MovieClip的;  

相同点
1,正如上面所说的,level表示了SWF之间的上下关系,类似的是,depth也表明了一种上下关系,就是MC之间的,MC的depth值越高,它就越在上面

2,比如:同一level和depth上,放入新的对象时,都会挤掉原来的. (by 自在幻想)  

layer与depth

layer只是一个编辑FLA时才存在的概念,当输出SWF以后,layer已经形神俱灭了,MC之间只靠depth来确定上下位置,靠坐标来确定前后左右的位置;  

另一种眼光看_root

_root是个MC的证据

1,_root变成了MC(说法特别不规范,有助于理解就行了).

_root在一个影片中一副老大的样子,好象大得不得了,会一直是这样的吗?
不;可以使用loadMovie()把一个SWF加载到另一个SWF(名为firstSWF)中的一个MC中,假设加载SWF(名为mySWF),到一个名为myMC的MC中,此时原来的MC已经被干掉了,mySWF已经变成了myMC, mySWF的_root已经指向firstSWF的根影片时间轴了.(请自行构造例子测试); 这下怎么操纵load进来的SWF的各种状态呢,就不用说了吧? (操纵myMC这个MC即可)

  相应地,如果加载某个SWF到levelN(N>0),那么在原SWF中可以把load进来的这个SWF当成一个名为_levelN的MC来操纵。  

 证据2, 测试如下语句:trace(typeof _root); 会输出"movieclip", 悄悄告诉你哦,trace(typeof _level0),也输出"movieclip";  

之所以强调这种提法,为什么呢,只可意会不可言传.     基本含义帮助中已经说明得很清楚了,下面是一点补充:

1,昨天一个朋友问到的,设动画有两个场景(scene),在两个场景中第一帧分别放一同名的MC,通过trace发现它们的深度是一样的.   下面我们重点说明一下这个问题: 其实这个depth值,是针对某一帧这个生存周期的概念.当播放到第一场景中的第一帧时,不能谈论第一个场景中的第一帧中的MC的depth,就象关公不可能战秦琼一样.  

2,那位朋友还问,象这种两个场景(扩展到多个场景)的情况,_root是怎样的呢?每个场景都有它们自己的_root吗?
非也,最终输出的SWF中,根本没有场景(scene)这个东西,象上述两个场景(每个场景中只有一个帧),输出的动画中只有连续的两个帧,何来什么场景! 又比如两个场景,都有20帧,那么gotoAndPlay("Scene 2",1)和gotoAndPlay(21),是一样的.  

 结论:_root从来只有一个.  

3,_root的说明中,"当前正在执行脚本的级别"中的"级别",就是指level,也译作"层级"; 我们知道不同的影片(SWF)可以分别载入到不同的层级(level)去,层级之间是并列的关系,所以在某个level中计算它的_root,得到的都是本身的level值.  

BTW,抱歉没能用图形的方式来说明,不过应该不难理解。

打印本文 打印本文 关闭窗口 关闭窗口