星期二, 1月 19, 2010

getDefinitionByName 動態創建元件/Class

假設我的元件庫中有元件 page1 page2 ...
想要new單一個的話,是使用new page1();

不過現在我有許多名字差不多的元件
想要用迴圈動態建立這些元件

應該要怎麼做呢?



解決辦法:
先用getDefinitionByName取得Class
在new這個Class


import flash.utils.getDefinitionByName; //必須import
var declarePage:Class = getDefinitionByName("page" + index) as Class;
var _mc:MovieClip = new declarePage();




其他資訊

不過不知道怎麼用 字串 => 呼叫建構式

不知道getDefinitionByName()是不是你要的
像是要建構一個Sprite

可以寫

var c:Class = getDefinitionByName("flash.display.Sprite") as Class;
var s:Sprite = new c();

getDefinitionByName()裡面可以傳入你的class字串
前提是該class有被編譯到SWF裡面
確保class有被編譯的最簡單方式
就是直接在隨便一個地方寫一個你的class reference

//某些程式碼
idv.cjcat.display.Console;
//另外一些程式碼

↑這樣就可以確保idv.cjcat.display.Console這個class會被編譯

之後就可以用getDefinitionByName("idv.cjcat.display.Console")來抓constructor

By cjcat on Ptt-flash



延伸資料
9RIA天地會 - 關於 getDefinitionByName 的問題
JUST DO IT !! - [AS3] getDefinitionByName函數
神魂顛倒 - 如何在AS3以不同的但有順序名稱MovieClip建立物件起來??

沒有留言:

張貼留言