180bpm

Scaleform에서 Loader로 불러온 swf의 Class를 사용하는 법 본문

Flash/Scaleform

Scaleform에서 Loader로 불러온 swf의 Class를 사용하는 법

powdersnow 2012. 1. 27. 18:42
private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			var fontLoader:Loader = new Loader();
			var fontReq:URLRequest = new URLRequest("fontlib.swf");
			fontLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadFont);
			fontLoader.load(fontReq);
		}
		private function onLoadFont($e:Event):void {
			var fontClass:Class = $e.target.applicationDomain.getDefinition("$normalFont")  as  Class;
			Font.registerFont(fontClass);
			_font = new fontClass();
			$e.target.removeEventListener(Event.COMPLETE, onLoadFont);
		}


applicationDomain을 지원 하지 않는다. (서포트 문서 참고. 4.0 대에서 지원 예정으로 나옴)

private function init(e:Event = null):void {
			removeEventListener(Event.ADDED_TO_STAGE, init);
			
			// entry point
			var fontLoader:Loader = new Loader();
			//http://umroom.com/blog/archive/2009/01/162248.html
			var loaderContext:LoaderContext = new LoaderContext ();
			loaderContext.applicationDomain = ApplicationDomain.currentDomain;
			var fontReq:URLRequest = new URLRequest("fontlib.swf");
			fontLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoadFont);
			fontLoader.load(fontReq,loaderContext);
				
			
	}

private function onLoadFont($e:Event):void {
			var fontClass:Class = getDefinitionByName("$NormalFont")  as  Class;	


를 쓰면 된다.
LoaderContext의 applicationDomain을 지정해주는건 플래시 플레이어 때문에. getDefinitionByName을 쓰는건 스케일폼때문에.
근데 이상한게 서포트 문서에선 applicationDomain이 지원이 안된다고 나와있는데 Warning - 지원하지 않는 함수입니다 라는 메시지가 뜨지 않는다.
Comments