Flash 載入外部資源是動態內容、模塊化開發、大型項目分包的基石。本文系統整理五大類加載方法,覆蓋文本、SWF、圖片、聲音、跨層級加載,附帶進階技巧與常見坑點。
// 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)// 建立空容器
_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);
loadMovie("module.swf", 1); // 載入到 _level1
_level1._x = 50; _level1._y = 50;
unloadMovie(1); // 卸載 _level1
層級規則:_level0 為主影片,數字大的層級覆蓋小的。每層級同一時間僅能存在一個 SWF。
// 循環切換圖片庫
var i = 0;
btnNext.onRelease = function() {
i = (i % 9) + 1; // 1-9 循環
loadMovie("img" + i + ".jpg", container);
container._xscale = container._yscale = 120;
};
注意:圖片載入後無法直接控制內部時間軸(圖片無時間軸),但可控制容器屬性。
var snd:Sound = new Sound();
snd.loadSound("bgm.mp3", true); // true=流式播放(邊下邊放), false=全載入後播放
btnPlay.onRelease = function() { snd.start(); };
btnStop.onRelease = function() { snd.stop(); };
流式模式適合長音樂/背景音;事件模式適合短音效(需預載)。
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 永遠在最底層。
| 場景 | 推薦方法 | 關鍵點 |
|---|---|---|
| 配置數據/簡單文本 | loadVariables | useCodepage=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/IOErrorEventcrossdomain.xml 允許源域訪問| AS2 全局函數 | AS3 類/方法 |
|---|---|
| loadVariables | URLLoader + URLVariables (dataFormat=VARIABLES) |
| loadMovie | Loader.load(new URLRequest(...)) → addChild(loader) |
| loadMovieNum | 多 Loader 實例管理深度 (addChildAt) |
| Sound.loadSound | Sound.load(new URLRequest(...)) + SoundChannel.play() |
| MovieClipLoader | LoaderInfo 事件 (progress, complete, init, httpStatus, ioError) |
AS3 統一採用事件驅動異步模型,功能更強大、錯誤處理更完善,建議新項目直接使用 AS3 API。