您可以從 Flash SWF 檔案內部將其他外部 SWF 檔案作為資產載入。載入外部 SWF 檔案有以下幾個原因:
將內容置入個別的 SWF 檔案,類似於將內容置入其本身的影片片段符號。其中的差異在於內容不存在於主要 SWF 檔案中。您也可載入影像檔案,例如 JPG、PNG、GIF。
若要從內部其他 SWF 檔案載入外部 SWF 檔案,請使用以下其中一個選項:
ActionScript 3.0 中的 Loader 類別是您用於載入及顯示外部內容之 DisplayObject 的子類別。若要載入 SWF 檔案,您可使用類別的 load 方法。 load 方法有一個必要參數,即為包含載入內容之 URL 位置的 URLRequest 執行個體。
下列程式碼範例會建立 Loader 執行個體,並載入名為「myExternalMovie.swf」的外部 SWF 檔案。
var myLoader:Loader = new Loader(); // create a new instance of the Loader class var url:URLRequest = new URLRequest("ExternalSWF.swf"); // in this case both SWFs are in the same folder myLoader.load(url); // load the SWF file addChild(myLoader); // add that instance to the display list, adding it to the Stage at 0,0 // (optional) myLoader.x = 10; // move the loaded SWF 10 pixels to the right (from the left edge) myLoader.y = 175; // move the loaded SWF 175 pixels down from the top // (optional) load a second external SWF file var my2ndLoader:Loader = new Loader(); var url2:URLRequest = new URLRequest("ExternalSWF2.swf"); my2ndLoader.load(url2); addChild(my2ndLoader); // optionally, you could put the 2nd SWF beneath // the 1st by using addChildAt(my2ndLoader, 1); // displacing the 1st SWF from position 1 to 2 in the display list // (optional) scaling of the 2nd SWF file my2ndLoader.scaleX = 2; // scale the SWF horizontally by 200% my2ndLoader.scaleY = 2; // scale the SWF vertically by 200%
載入之 SWF 檔案的 URL 可為相對或絕對路徑。如需有關 Flash Player 如何處理 URL 的詳細資訊,請參閱下方的相對路徑。如需有關 Loader 類別的詳細資訊,請參閱 Platform ActionScript 語言參考中的 Loader。
root 參照 (可使用時) 一律反映顯示清單樹狀結構之 SWF 檔案代表部分中最頂層的顯示物件。(若為影像,root 參考點陣圖物件。)
注意: 在 ActionScript 3.0 中,沒有與 ActionScript 2.0 _lockroot 或 _level 相同的屬性。請參閱 ActionScript 3.0 開發人員指南中的顯示程式設計的基本概念。
loadMovie 命令可在 ActionScript 2.0 中將一個外部 SWF 檔案或影像載入影片片段中,或者上層影片的其他層級中。
loadMovie 命令有兩種不同的型式:
將外部內容載入影片片段執行個體時,Adobe 建議您使用 MovieClip 方法版本的 loadMovie。此版本直接從您要載入內容的影片片段呼叫,並透過內容的 URL 傳遞。
myMovieClipInstance.loadMovie("myExternalMovie.swf"); // here only the filename is given, indicating the SWF file // is in the same folder as the parent SWF.
載入之內容的 URL 可為相對或絕對路徑。如需有關 Flash player 如何處理 URL 的詳細資訊,請參閱下方的相對路徑。
載入後,內容會顯示在容器影片片段中。容器影片片段的位置以及其他基本內容會保留。但是,任何在容器影片片段中定義的自訂屬性或函數將不再存在。新的內容會取代之前的所有內容 (包括程式碼和 onRelease 之類的事件處理常式)。因此,任何針對影片片段使用 onLoad 事件處理常式所做的嘗試都無法運作。在此情況下,請改用 MovieClipLoader 類別。如需有關 MovieClip.loadMovie 的詳細資訊,請參閱 ActionScript 2.0 語言參考中的 MovieClip.loadMovie。
loadMovie 命令也會以全域功能的型式存在。此功能有兩個必要的參數,即為外部內容的 URL 和載入內容的目標。目標參數可為字串或參照。下列文字行相當於將「myExternalMovie.swf」載入名為 myContainer 影片片段執行個體:
loadMovie("myExternalMovie.swf", myContainer); // the target myContainer is an object reference loadMovie("myExternalMovie.swf", "myContainer"); // the target "myContainer" is a string
loadMovie 還可以將內容載入 Flash Player 的不同層級。Flash Player 中層級就如同播放器階層。可在相同的 Flash player 執行個體中播放多個影片,不需以巢狀方式相互置入其中。每個層級代表一個獨特的根,在此處影片可獨立於其他層級內的影片進行播放 (必須使用 _lockroot)。
您可以使用緊跟在代表層級號碼的數字之後的 _level 參照 ActionScript 中的層級。第一個載入 Flash Player 的影片在 _level0 上。其他層級可新增到該層級的頂端。下列對 loadMovie 的呼叫會將「myExternalMovie.swf」載入目前在播放器中播放之影片頂端的層級 1。
loadMovie("myExternalMovie.swf", "_level1");
全域 loadMovie 函數的變體為 loadMovieNum。此方法就如同 loadMovie,但其只鎖定層級,且是透過數字鎖定,而不是名稱。若要將 SWF 檔案載入層級 1 (_level1),請使用以下內容:
loadMovieNum("myExternalMovie.swf", 1);
載入至層級時,Adobe 建議您使用 loadMovieNum 而非 loadMovie。如需詳細資訊,請參閱 ActionScript 2.0 語言參考中的全域 loadMovie。
將外部影片載入其他影片時,載入之影片片段的 _root 參照會從其主要時間軸變更為載入之影片的時間軸。也就是說,_root 一律參考階層中最頂端的時間軸。如果您不希望 _root 參考最頂端的時間軸,可將載入影片片段之主要時間軸的 _lockroot 屬性設為 true。此屬性告知該時間軸的子項目,當其參考 _root 時要參考該時間軸。
this._lockroot = true; // add this code in the main timeline of the SWF file that will be loaded into another SWF
注意: _lockroot 屬性僅在發佈到 Flash Player 7 或更新版本時才可使用。
ActionScript 2.0 中的 MovieClipLoader 類別設計可使將外部內容載入 MovieClip 執行個體的過程變得更容易。如同之前提及的,當新的內容載入至這些影片片段後,影片片段中已定義的變數及函數就會移除。像 onLoad 之類的回呼是不可能的。不過,MovieClipLoader 以代理這類事件的方式避開此限制。您可以建立不同的 MovieClipLoader 執行個體,管理將內容載入至其他影片片段的載入作業。因此不會發生清除影片片段中之變數及函數的情形。
透過 MovieClipLoader 類別將內容載入影片片段中時,首先要製作類別的新執行個體。然後使用 loadClip 將內容載入目標影片片段中。在以下範例中,新的內容將會載入影片片段 myContainer 中。
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.loadClip("myExternalMovie.swf", myContainer);
如果您想知道內容已載入,請使用 onLoadInit 事件處理常式以及您的 MovieClipLoader 執行個體。
var myLoader:MovieClipLoader = new MovieClipLoader(); myLoader.addListener(this); myLoader.loadClip("myExternalMovie.swf", myContainer); function onLoadInit(mc:MovieClip) { trace("content has been loaded into "+mc); }
想掌控更多有關將內容載入影片片段中的資訊時,請使用 MovieClipLoader 類別,而不是 MovieClip.loadMovie。(例如,在您希望可以檢查載入進度時使用此事件處理常式。) 如需有關 MovieClipLoader 類別的詳細資訊,請參閱 ActionScript 2.0 語言參考中的 MovieClipLoader。
注意: MovieClipLoader類別僅在發佈到 Flash Player 7 或更新版本時才可使用。
使用具有 Loader 和 loadMovie 的相對路徑可能造成混亂。因為任何 SWF 檔案或影片片段的時間軸都可執行 loadMovie 動作,問題是「載入之影片相對於哪個時間軸?」其是否相對於 _level0 上的主要時間軸?又或,其是否相對於執行影片載入動作的時間軸?答案很簡單: 載入之影片一律相對於將其載入的時間軸。請參閱相對 URL 參照不正確 | Flash (tn_04157),取得相對路徑的討論,其與載入外部 SWF 檔案也有相關。
多數情況下,載入之影片會繼承上層影片的影格速率。例如,在載入至影格速率為 24 fps 的影片後,原影格速率為 12 fps 的 SWF 檔案會以 24 fps 的速度播放。唯一的例外是,如果載入之影片的同步化選項設為「串流」,則時間軸上會包含聲音。只有在這個時候,主要影片才會繼承載入之影片的影格速率,以確保聲音正確播放。
注意: ActionScript 3.0 可讓您使用 Stage.frameRate 屬性自動變更影格速率。
關鍵字: Flash Player, 載入影片; ActionScript; 指令碼; 層級; 告知目標; 變數; 目標; 執行個體; SWF; loadMovie; tn_14190
登入您的帳戶