萬盛學電腦網

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

Flash Loading 制作基礎:getBytesLoaded 核心邏輯與三種輪詢方式對比

Loading 的職業道德

Loading 是用戶唯一必看、作者卻常忽視的環節。重視 Loading,體現 Flash 工作者的專業態度。拒絕盲目套用現成組件,掌握核心邏輯才能因地制宜。

核心 API

摒棄過時的 `getFrameLoaded`,唯有兩大王者:

  • `getBytesLoaded()`:已加載位元組數。
  • `getBytesTotal()`:總位元組數。
  • 進度比 = `getBytesLoaded() / getBytesTotal()`。

三種輪詢實現方式

1. setInterval 定時器法(不推薦新手)

function loadCheck() {
    var p = getBytesLoaded() / getBytesTotal();
    if (p == 1) {
        clearInterval(intervalID); // 必須清理!
        gotoAndPlay(mainFrame);
    }
}
var intervalID = setInterval(loadCheck, 30); // 30ms 輪詢

缺點:易忘 `clearInterval` 導致全程無謂輪詢;函數作用域處理 MC 路徑麻煩(`this` 指向問題);不利於封裝復用。

2. onEnterFrame 幀循環法(推薦)

loader_mc.onEnterFrame = function() {
    var target = this._parent; // 取得主時間軸
    var p = target.getBytesLoaded() / target.getBytesTotal();
    // 更新 loader_mc 視覺表現(進度條寬度、旋轉角度、粒子數等)
    if (p == 1) {
        this.onEnterFrame = null; // 釋放自身
        target.gotoAndPlay(mainFrame);
    }
};

優勢:
- `this` 直接指向當前 MC,操作自身極其方便。
- `_parent`/`_root` 輕鬆訪問主時間軸。
- 代碼寫在主時間軸,統一管理,易查找維護。
- 結合 MC 視覺表現(進度條、旋轉齒輪、填充形狀等)創意無限。

3. 時間軸循環法(古老,略過)

利用幀循環跳轉檢查,結構混亂,不推薦。

進階預告

下一節將深入講解:
• MovieClipLoader 類:加載外部 SWF/JPG/PNG/GIF 的專業類,支援進度、完整事件、錯誤處理。
• V2 組件容器:包含組件時的 Loading 特殊處理(RSL、組件初始化權重)。

最佳實踐原則

  1. 代碼寫在主時間軸,而非 MC/按鈕上。
  2. 給 Loading MC 實例名(如 `loader_mc`),便於引用。
  3. 創意優先:進度條只是最基礎形式,嘗試圖片拼圖、角色成長、劇情推進等敘事性 Loading。
  4. 及時清理監聽/間隔,不留垃圾代碼。
copyright © 萬盛學電腦網 all rights reserved