萬盛學電腦網

您现在的位置: 萬盛學電腦網 >> 軟體知識 >  >> 影像處理 >> Flash 教學

Flash 加載外部資源完全指南:loadVariables、loadMovie、loadSound 與 loadMovieNum 深度解析

Flash 載入外部資源是動態內容、模塊化開發、大型項目分包的基石。本文系統整理五大類加載方法,覆蓋文本、SWF、圖片、聲音、跨層級加載,附帶進階技巧與常見坑點。

一、loadVariables:載入外部文本/數據

文本文件格式要求

// msg.txt 內容必須為 URL 編碼的鍵值對
msg=Hello%20World&score=100&playerName=%E7%8E%8B%E5%B0%8F%E6%98%8E

變量名需與動態文本實例的 var 屬性一致(如 msg)。

基礎實現(按鈕腳本)

on(release) {
    loadVariables("msg.txt", msg); // 目標可為動態文本實例名或 _root
    System.useCodepage = true;     // 關鍵:解決中文亂碼
}

進階:可滾動文本框

  • 動態文本框實例名 msg,啟用「多行」「邊框」「可選取」
  • 右側繪製滾動條:矩形軌道 + 向上/向下按鈕
  • 向上按鈕:on(press) { _root.msg.scroll--; }
  • 向下按鈕:on(press) { _root.msg.scroll++; }
  • scroll 屬性控制首行顯示索引(1-based)

二、loadMovie:載入外部 SWF/圖片到元件/層級

模式 A:載入到影片剪輯(推薦,可控性最強)

// 建立空容器
_root.createEmptyMovieClip("container", 1);
container._x = 100; container._y = 100;

// 載入
loadMovie("module.swf", "container");
// 或按鈕腳本
on(release) { loadMovie("module.swf", "container"); }

// 控制載入後的 SWF
container._xscale = 80; // 縮放
container._alpha = 50;  // 透明度
// 協作:容器內 SWF 可用 _parent 訪問主時間軸

// 卸載
unloadMovie("container"); // 或 unloadMovie(container);

模式 B:載入到層級

loadMovie("module.swf", 1); // 載入到 _level1
_level1._x = 50; _level1._y = 50;
unloadMovie(1); // 卸載 _level1

層級規則:_level0 為主影片,數字大的層級覆蓋小的。每層級同一時間僅能存在一個 SWF。

模式 C:載入外部圖片 (JPG/PNG/GIF)

// 循環切換圖片庫
var i = 0;
btnNext.onRelease = function() {
    i = (i % 9) + 1; // 1-9 循環
    loadMovie("img" + i + ".jpg", container);
    container._xscale = container._yscale = 120;
};

注意:圖片載入後無法直接控制內部時間軸(圖片無時間軸),但可控制容器屬性。

三、loadSound / Sound.loadSound:載入外部聲音

var snd:Sound = new Sound();
snd.loadSound("bgm.mp3", true); // true=流式播放(邊下邊放), false=全載入後播放

btnPlay.onRelease = function() { snd.start(); };
btnStop.onRelease = function() { snd.stop(); };

流式模式適合長音樂/背景音;事件模式適合短音效(需預載)。

四、loadMovieNum:層級加載的進階控制

loadMovieNum("a.swf", 1); // _level1
loadMovieNum("b.swf", 2); // _level2
loadMovieNum("c.swf", 3); // _level3

// 跨層級控制語法
_level1._x = 10;
_level2.someMC._alpha = 50;
_level3.soundMC.stop();

層級覆蓋規則:高層級覆蓋低層級。_level0 永遠在最底層。

五、綜合最佳實踐與避坑指南

場景推薦方法關鍵點
配置數據/簡單文本loadVariablesuseCodepage=true、URL編碼、目標實例var屬性匹配
模塊化 SWF(頁面、組件)loadMovie 到容器 MC容器預先 createEmptyMovieClip、相對路徑、卸載釋放內存
圖片畫廊/換膚loadMovie 圖片到容器預載緩存、錯誤處理(onLoadInit)、容器縮放適配
背景音樂/長語音Sound.loadSound(..., true)流式播放、onSoundComplete 循環、音量控制
短音效/即時反饋Sound.loadSound(..., false)預載完成再播、多實例並發播放
多模塊並行大型應用loadMovieNum 分層級層級規劃、跨層級通信(_levelN.xxx)、內存監控

常見錯誤與解決

  • 中文亂碼:必須設置 System.useCodepage = true 且文本文件保存為 ANSI/UTF-8 配合
  • 載入失敗無提示:使用 MovieClipLoader 類 (AS2) / Loader 類 (AS3) 監聽 onLoadError/IOErrorEvent
  • 跨域失敗:目標域需部署 crossdomain.xml 允許源域訪問
  • 相對路徑失效:以嵌入 SWF 的 HTML 頁面所在目錄為基準,非 SWF 文件目錄
  • 內存洩漏:卸載時確保清除事件監聽、停止音頻、釋放引用

AS3 時代的對應 API

AS2 全局函數AS3 類/方法
loadVariablesURLLoader + URLVariables (dataFormat=VARIABLES)
loadMovieLoader.load(new URLRequest(...)) → addChild(loader)
loadMovieNum多 Loader 實例管理深度 (addChildAt)
Sound.loadSoundSound.load(new URLRequest(...)) + SoundChannel.play()
MovieClipLoaderLoaderInfo 事件 (progress, complete, init, httpStatus, ioError)

AS3 統一採用事件驅動異步模型,功能更強大、錯誤處理更完善,建議新項目直接使用 AS3 API。

copyright © 萬盛學電腦網 all rights reserved