Flash 中很常用到loader 來讀取外部的swf檔案載入到畫面中,
但是載入進來的swf如果含還有一些函數,卻是沒辦法呼叫。
這常常會造成一些設計好的swf元件不能重複利用的問題
不過在Adobe的官方網站上有提供一個ClassLoader source Code
可以用來載入swf成class去呼叫swf的函數與方法
之後在網路查了一下有比較簡單的寫法大概如下
基本上就是將檔案讀取進來
然後在讀取完成後將swf中的class抓出來再讓一個物件實作這個類別
不過這樣的寫法並沒有處理對於讀取錯誤作處理
adobe的官方寫法是有進行例外處理
也將怎個讀取功能寫成了一個class 是比較完整的範例
另外邦邦也將adobe的範例修改一次
把會重複讀取同樣一個swf的問題解決掉了
參考資料
w3blog
Adobe 官方
邦邦
但是載入進來的swf如果含還有一些函數,卻是沒辦法呼叫。
這常常會造成一些設計好的swf元件不能重複利用的問題
不過在Adobe的官方網站上有提供一個ClassLoader source Code
可以用來載入swf成class去呼叫swf的函數與方法
之後在網路查了一下有比較簡單的寫法大概如下
import flash.display.Sprite;
import flash.display.Loader;
import flash.system.ApplicationDomain;
import flash.net.URLRequest;
import flash.events.*;
import flash.util.trace;
public class Main extends Sprite
{
private var child1:Loader;
public function Main()
{
var url1:URLRequest = new URLRequest('SWFName.swf');
url1.applicationDomain = new ApplicationDomain(ApplicationDomain.currentDomain);
child1 = new Loader();
child1.addEventListener(EventType.COMPLETE, onChild1Complete);
//設定載入完成的handler
child1.load(url1); //開始載入swf檔案
}
private function onChild1Complete(e:Event):Void {
var c:Class = child1.loadeeInfo.applicationDomain.getClass('ClassName');
//將swf中的class抓出來成為一個class
var co:Object = new c(); /將swf中的class實作
co.method();
}
}
基本上就是將檔案讀取進來
然後在讀取完成後將swf中的class抓出來再讓一個物件實作這個類別
不過這樣的寫法並沒有處理對於讀取錯誤作處理
adobe的官方寫法是有進行例外處理
也將怎個讀取功能寫成了一個class 是比較完整的範例
另外邦邦也將adobe的範例修改一次
把會重複讀取同樣一個swf的問題解決掉了
參考資料
w3blog
Adobe 官方
邦邦
留言