[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,抱歉没能用图形的方式来说明,不过应该不难理解。
出处:snow's blog
责任编辑:qhwa
◎进入论坛flash专栏版块参加讨论
| |
| [root,global,level,depth] 解析 |
| ||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||
|
| |||||||||||||||||||||||||||||||||||
| |
|
>
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器