_root
动作脚本属性指定或返回对 SWF 文件根时间轴的引用。如果 SWF 文件有多个级别,则根时间轴位于包含当前正在执行的脚本的级别上。例如,如果级别 1 中的脚本计算 _root
,则返回 _level1
。但是,_root
所指定的时间轴可能有所变化,具体取决于 SWF 文件是独立运行(在它自己的级别中)还是已由 loadMovie()
调用加载到影片剪辑实例中。
例如,假设名为 container.swf 的文件在其主时间轴上有一个名为 target_mc
的影片剪辑实例。container.swf 文件在其主时间轴上声明了一个名为 userName
的变量;然后相同的脚本将名为 contents.swf 的另一个文件加载到影片剪辑 target_mc
中。
// 在 container.swf 中: _root.userName = "Tim"; target_mc.loadMovie("contents.swf");
加载的 SWF 文件 contents.swf 还会在其根时间轴上声明一个名为 userName
的变量。
// 在 content.swf 中: _root.userName = "Mary";
当 contents.swf 加载到 container.swf 中的影片剪辑中时,附加到宿主 SWF 文件 (container.swf) 的根时间轴上的 userName
的值将设置为 "Mary"。这将导致 container.swf(以及 contents.swf)中的代码出现问题。
若要强制 _root
始终指定所加载的 SWF 文件的时间轴,而不是实际的根时间轴,请使用_lockroot
属性。正在实施加载的 SWF 文件或正被加载的 SWF 文件都可以设置此属性。当 _lockroot
在影片剪辑实例上设置为 true
时,该影片剪辑将充当加载到其中的任何 SWF 文件的 _root
。当 _lockroot
在 SWF 文件中设置为 true
时,该 SWF 文件将充当它自己的根,而不管加载它的其它 SWF 文件。任何影片剪辑以及任意数目的影片剪辑都可以将 _lockroot
设置为 true
。默认情况下,此属性为 false
。
例如,container.swf 的创作者可以将以下代码附加到 target_mc
影片剪辑:
// 附加到 target_mc 影片剪辑: onClipEvent (load) { this._lockroot = true; }
这可以确保在 contents.swf(或加载到 target_mc
的任何 SWF 文件)中对 _root
的引用将引用自己的时间轴,而不是 container.swf 的实际根时间轴。
同样,contents.swf 的创作者可以将以下代码添加到主时间轴中。
// 在 contents.swf 中: this._lockroot = true;
这可以确保无论将 contents.swf 加载到什么位置,它对 _root
的任何引用都将引用它自己的主时间轴,而不是宿主 SWF 文件的时间轴。
有关更多信息,请参见MovieClip._lockroot。