getDefinitionByName with swc

一般 Flash 程式開發時,取資源的方式有兩種:

  • .swf
  • .swc

.swf 檔屬於 Runtime 時從外部載進來取用的方式,通常會使用 Loader 來作處理:

var loader:Loader = new Loader();

var request:URLRequest = new URLRequest('YOUR_SWF_PATH');
loader = new Loader();
loader.load(request);
loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoaderComplete);

private function onLoaderComplete(event:Event):void
{
	var loader:LoaderInfo = event.currentTarget as LoaderInfo;
	loader.removeEventListener(Event.COMPLETE, onLoaderComplete);
}

private function getClassReference(className:String):Class
{
	return loader.contentLoaderInfo.getDefinition(className) as Class;
}

.swc 擋則是 Compiler 時就會一起包進來,要取用內部元件通常就直接 new 出來就可以:

var component:CLASS_NAME = new CLASS_NAME();

如果想要動態取得元件的話會碰到一些問題,一般來講會用 getDefinitionByName(CLASS_NAME:String) 這個 method:

import flash.utils.getDefinitionByName;

var ClassReference:Class = getDefinitionByName("CLASS_NAME") as Class;
var obj:Object = new ClassReference();

不過編譯完執行後會碰到錯誤,解決方式如下:

  • Project > Properties
  • Flex Compiler > 加入參數 -include-libraries=YOUR_ABSOLUTE_SWC_PATH.swc