
用反射動態創建實例
使用new運算符創建對象或實例時,直接調用了某個具體類的構造函數,而在編寫程序時,經常需要動態地創建類的實例,這時可以使用反射來創建實例。
例如,如果僅知道某個實例,而不知道實例對應的類,就可以用反射來創建實例。AS3中的所有類都屬于Class類型,例如,MovieClip是一個Class,Bitmap也是一個Class。
例:
1、新建一個Flash文檔
2、單擊圖層第一幀,打開動作面板,輸入代碼:
//動態得到類的構造函數
var classcontructor:Class = MovieClip;
//創建相關類的實例
var mc:MovieClip = new classcontructor();
mc.graphics.beginFill(0xff9900,100);
mc.graphics.drawRect(0,0,100,100);
addChild(mc);
3、測試影片,可看到繪制的矩形圖。
上面的代碼并沒有直接用MovieClip類來創建實例,而是先把MovieClip類保存在一個數據類型為Class的變量 “classcontructor”中,再通過“classcontructor”來創建實例。當“classcontructor”的值改為其他類型時,創建的實例也就屬于其他類型。
用同樣的方法把庫中的圖片導出來,步驟同上,看代碼:
//保存鏈接名
var linkname:String = "BigPhoto";
//得到類信息
var cla:Class = getDefinitionByName(linkname);
//創建類的實例
var bitmapdata:BitmapData = new cla(50,50);
var img:Bitmap = new Bitmap(bitmapdata);
addChild(img);
測試影片,可看到從庫中導出的圖片。(測試此代碼請選擇【文件】【發布設置】Flahs選項卡,ActionScript 版本(A)點設置,把嚴謹模式的勾去掉,點確定。)
用上面的原理,可以根據鏈接名來從庫中動態導出圖片,深入下去,可制作swf素材庫,根據庫中的鏈接名可以動態導出素材。