指定加载的 SWF 文件的根时间轴

_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