loadMovie 是 ActionScript 1.0 和 2.0 (AS1/AS2) 时代用于在 Flash 播放器中动态加载外部内容的核心函数,虽然在新版本的 ActionScript 3.0 (AS3) 中,它的功能被 Loader 类所取代,但理解 loadMovie 对于维护旧项目或理解 Flash 的加载机制非常重要。

(图片来源网络,侵删)
loadMovie 的基本语法和参数
loadMovie 有两种主要的语法形式,用于不同的加载场景。
语法 1: 加载到目标影片剪辑
这是最常用的形式,用于将外部 SWF、JPG、PNG 或 GIF 文件加载到指定的目标影片剪辑中。
loadMovie(url:String, target:Object [, method:String]) : Void
参数详解:
-
url(字符串, 必需)
(图片来源网络,侵删)- 作用: 指定要加载的外部文件的路径。
- 类型: 可以是相对路径或绝对路径。
- 示例:
"images/photo.jpg"(与 SWF 文件在同一目录下的images文件夹中)"../data.swf"(在 SWF 文件上一级目录中的data.swf)"http://www.example.com/assets/banner.swf"(网络上的绝对路径)
- 注意: 如果加载的是外部域的文件,可能会遇到跨域安全策略 问题,导致加载失败或无法访问其内容。
-
target(对象, 必需)- 作用: 指定一个目标影片剪辑,加载的内容将显示在这个剪辑内部。
- 类型: 可以是:
- 一个影片剪辑的实例名称。
- 一个指向影片剪辑的路径(
_root.container_mc)。 - 一个指向影片剪辑的引用(
this或_parent)。
- 工作原理: 加载的内容会替换掉目标影片剪辑中原来的所有内容,目标影片剪辑的位置、旋转、缩放等属性会应用到加载进来的新内容上,加载内容的原始尺寸也会被保留。
-
method(字符串, 可选)- 作用: 指定发送变量的 HTTP 方法,这个参数与
loadVariables函数相关,loadMovie同时需要加载变量,才需要设置它。 - 可选值:
"GET": 将变量附加到 URL 的末尾进行发送。"POST": 在单独的 HTTP 标头中发送变量。
- 注意: 对于单纯的图片或 SWF 加载,通常可以忽略此参数。
- 作用: 指定发送变量的 HTTP 方法,这个参数与
语法 2: 加载到某个层
这种形式用于将外部 SWF 文件加载到 Flash 播放器的某个层级,而不是某个影片剪辑中。
loadMovie(url:String, level:Number [, method:String]) : Void
参数详解:

(图片来源网络,侵删)
-
url(字符串, 必需)- 与语法 1 中的
url完全相同,指定要加载的文件路径。
- 与语法 1 中的
-
level(数字, 必需)- 作用: 指定一个整数层级,用于管理加载进来的 SWF。
- 层级管理:
- 数字越大,层级越高,显示越靠前,加载到
level 5的内容会显示在level 3的内容之上。 level 0是最特殊的,加载到level 0的 SWF 会替换掉主时间轴(原始的 SWF),这常用于制作无刷新的页面切换效果。- 每个层级只能有一个 SWF,如果你再次向同一个层级加载新的 SWF,旧的 SWF 会被自动卸载并替换。
- 数字越大,层级越高,显示越靠前,加载到
-
method(字符串, 可选)- 与语法 1 中的
method作用相同,用于发送变量,通常可忽略。
- 与语法 1 中的
loadMovie 的实际应用示例
假设我们有一个主场景 main.fla,舞台上有一个名为 loader_mc 的空影片剪辑实例。
示例 1: 加载 JPG 图片到影片剪辑
目标: 点击按钮后,将 images/photo.jpg 加载到 loader_mc 中。
// 假设按钮的实例名称是 "loadBtn"
loadBtn.onRelease = function() {
// 调用 loadMovie
// 参数1: 图片路径
// 参数2: 目标影片剪辑的实例名称
loadMovie("images/photo.jpg", "loader_mc");
};
示例 2: 加载 SWF 文件到层级
目标: 点击按钮后,将 external.swf 加载到 level 1。
// 假设按钮的实例名称是 "loadSWFBtn"
loadSWFBtn.onRelease = function() {
// 调用 loadMovie
// 参数1: SWF文件路径
// 参数2: 目标层级
loadMovie("external.swf", 1);
};
示例 3: 加载并处理加载事件
loadMovie 本身是异步的,这意味着代码不会等待加载完成就继续执行,为了在加载完成后执行某些操作(获取加载内容的尺寸),我们需要监听影片剪辑的事件。
在 AS2 中,最常用的是 onLoadComplete 和 onLoadError。
// 为目标影片剪辑创建一个 onLoad 事件处理器
// 注意:必须在加载前设置
loader_mc.onLoadComplete = function() {
// 加载成功后执行的代码
trace("加载完成!");
// 可以获取加载内容的原始尺寸
trace("原始宽度: " + this._width);
trace("原始高度: " + this._height);
};
loader_mc.onLoadError = function() {
// 加载失败时执行的代码
trace("加载失败,请检查路径或网络连接!");
};
// 然后在按钮点击事件中触发加载
loadBtn.onRelease = function() {
loadMovie("images/photo.jpg", "loader_mc");
};
loadMovie 与 loadMovieNum 的区别
在 Flash 8 及更早版本中,你还会看到一个名为 loadMovieNum 的函数。
loadMovie(url, level): 它是loadMovie(url, level, ...)的简写形式,功能完全相同,只是去掉了可选的method参数,在大多数情况下,两者可以互换使用。
重要注意事项和局限性
-
跨域策略:
- 当你的主 SWF 文件(位于
domainA.com)尝试加载另一个域(domainB.com)的资源时,出于安全考虑,Flash 播放器会阻止。 - 解决方案:目标服务器(
domainB.com)必须在其根目录下提供一个名为crossdomain.xml的策略文件,明确允许domainA.com访问其资源。
- 当你的主 SWF 文件(位于
-
版本兼容性:
loadMovie是 AS1/AS2 的函数,在 AS3 中,它已被弃用,AS3 使用flash.display.Loader类来实现相同的功能,并且采用了事件驱动模型(Event.COMPLETE,IOErrorEvent.IO_ERROR等)。
-
加载类型限制:
loadMovie可以加载 SWF、JPG、PNG 和 GIF 文件。- 它不能直接加载其他格式,如 MP3、FLV/F4V(这些有专门的
Sound和Video类或 NetStream 类来处理)。
-
:
- 要卸载通过
loadMovie加载的内容,可以使用unloadMovie()函数。unloadMovie("loader_mc");// 卸载指定影片剪辑中的内容unloadMovie(1);// 卸载指定层级中的内容
- 要卸载通过
总结表格
| 特性 | loadMovie(url, target) |
loadMovie(url, level) |
|---|---|---|
| 加载目标 | 影片剪辑实例 | 播放器的层级 |
| 属性继承 | 继承目标剪辑的位置、缩放等属性 | 不继承,按原始尺寸显示在 (0,0) |
| 层级管理 | 无层级概念,依赖剪辑的堆叠顺序 | 数字越大,显示越靠前 |
| 特殊层级 | 无 | level 0 会替换主时间轴 |
| 主要用途 | 在特定容器内加载图片或模块化内容 | 加载全屏覆盖、界面切换、广告等 |
希望这份详细的解析能帮助你完全理解 loadMovie 的参数和使用方法!
