Flash loadMovie参数如何正确传递与使用?

99ANYc3cd6
预计阅读时长 15 分钟
位置: 首页 参数 正文

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

flash loadmovie 参数
(图片来源网络,侵删)

loadMovie 的基本语法和参数

loadMovie 有两种主要的语法形式,用于不同的加载场景。

语法 1: 加载到目标影片剪辑

这是最常用的形式,用于将外部 SWF、JPG、PNG 或 GIF 文件加载到指定的目标影片剪辑中。

loadMovie(url:String, target:Object [, method:String]) : Void

参数详解:

  1. url (字符串, 必需)

    flash loadmovie 参数
    (图片来源网络,侵删)
    • 作用: 指定要加载的外部文件的路径。
    • 类型: 可以是相对路径或绝对路径。
    • 示例:
      • "images/photo.jpg" (与 SWF 文件在同一目录下的 images 文件夹中)
      • "../data.swf" (在 SWF 文件上一级目录中的 data.swf)
      • "http://www.example.com/assets/banner.swf" (网络上的绝对路径)
    • 注意: 如果加载的是外部域的文件,可能会遇到跨域安全策略 问题,导致加载失败或无法访问其内容。
  2. target (对象, 必需)

    • 作用: 指定一个目标影片剪辑,加载的内容将显示在这个剪辑内部。
    • 类型: 可以是:
      • 一个影片剪辑的实例名称。
      • 一个指向影片剪辑的路径(_root.container_mc)。
      • 一个指向影片剪辑的引用(this_parent)。
    • 工作原理: 加载的内容会替换掉目标影片剪辑中原来的所有内容,目标影片剪辑的位置、旋转、缩放等属性会应用到加载进来的新内容上,加载内容的原始尺寸也会被保留。
  3. method (字符串, 可选)

    • 作用: 指定发送变量的 HTTP 方法,这个参数与 loadVariables 函数相关,loadMovie 同时需要加载变量,才需要设置它。
    • 可选值:
      • "GET": 将变量附加到 URL 的末尾进行发送。
      • "POST": 在单独的 HTTP 标头中发送变量。
    • 注意: 对于单纯的图片或 SWF 加载,通常可以忽略此参数。

语法 2: 加载到某个层

这种形式用于将外部 SWF 文件加载到 Flash 播放器的某个层级,而不是某个影片剪辑中。

loadMovie(url:String, level:Number [, method:String]) : Void

参数详解:

flash loadmovie 参数
(图片来源网络,侵删)
  1. url (字符串, 必需)

    • 与语法 1 中的 url 完全相同,指定要加载的文件路径。
  2. level (数字, 必需)

    • 作用: 指定一个整数层级,用于管理加载进来的 SWF。
    • 层级管理:
      • 数字越大,层级越高,显示越靠前,加载到 level 5 的内容会显示在 level 3 的内容之上。
      • level 0 是最特殊的,加载到 level 0 的 SWF 会替换掉主时间轴(原始的 SWF),这常用于制作无刷新的页面切换效果。
      • 每个层级只能有一个 SWF,如果你再次向同一个层级加载新的 SWF,旧的 SWF 会被自动卸载并替换。
  3. method (字符串, 可选)

    • 与语法 1 中的 method 作用相同,用于发送变量,通常可忽略。

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 中,最常用的是 onLoadCompleteonLoadError

// 为目标影片剪辑创建一个 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");
};

loadMovieloadMovieNum 的区别

在 Flash 8 及更早版本中,你还会看到一个名为 loadMovieNum 的函数。

  • loadMovie(url, level): 它是 loadMovie(url, level, ...) 的简写形式,功能完全相同,只是去掉了可选的 method 参数,在大多数情况下,两者可以互换使用。

重要注意事项和局限性

  1. 跨域策略:

    • 当你的主 SWF 文件(位于 domainA.com)尝试加载另一个域(domainB.com)的资源时,出于安全考虑,Flash 播放器会阻止。
    • 解决方案:目标服务器(domainB.com)必须在其根目录下提供一个名为 crossdomain.xml 的策略文件,明确允许 domainA.com 访问其资源。
  2. 版本兼容性:

    • loadMovieAS1/AS2 的函数,在 AS3 中,它已被弃用,AS3 使用 flash.display.Loader 类来实现相同的功能,并且采用了事件驱动模型(Event.COMPLETE, IOErrorEvent.IO_ERROR 等)。
  3. 加载类型限制:

    • loadMovie 可以加载 SWF、JPG、PNG 和 GIF 文件。
    • 不能直接加载其他格式,如 MP3、FLV/F4V(这些有专门的 SoundVideo 类或 NetStream 类来处理)。
  4. :

    • 要卸载通过 loadMovie 加载的内容,可以使用 unloadMovie() 函数。
      • unloadMovie("loader_mc"); // 卸载指定影片剪辑中的内容
      • unloadMovie(1); // 卸载指定层级中的内容

总结表格

特性 loadMovie(url, target) loadMovie(url, level)
加载目标 影片剪辑实例 播放器的层级
属性继承 继承目标剪辑的位置、缩放等属性 不继承,按原始尺寸显示在 (0,0)
层级管理 无层级概念,依赖剪辑的堆叠顺序 数字越大,显示越靠前
特殊层级 level 0 会替换主时间轴
主要用途 在特定容器内加载图片或模块化内容 加载全屏覆盖、界面切换、广告等

希望这份详细的解析能帮助你完全理解 loadMovie 的参数和使用方法!

-- 展开阅读全文 --
头像
AI+3S如何赋能智慧农业?
« 上一篇 12-07
CrystalDiskMark参数怎么看?
下一篇 » 12-07

相关文章

取消
微信二维码
支付宝二维码

最近发表

标签列表

目录[+]