Starling 프레임워크 공부 겸해서 샘플코드를 보다가 재미있는 코드를 발견했다.
특정 클래스를 지칭하는 문자열을 저장해놓고 그문자열을 바탕으로 클래스를 런타임때 동적으로 생성하는 코드였다.
예전에 문자열 그대로 받아 클래스를 생성할 수 없을까 고민한적이 있었다.
예를 들자면 input 텍스트필드에 sprite를 적고 엔터를 누르면 sprite 객체가 생성!
적절한 비유는 아니지만 갑자기 예를 들려니 생각이 안난다 -_-...
어쨌든 분명 이러고 싶을때가 있다 ㅋㅋ;
불가능한건 아니였지만 switch 문이나 if문등을 이용해야 했었는데 그냥 하는방법이 요기잉네..
문제의 함수들.
flash.utils 패키지에 속해있다.
var str:String = getQualifiedClassName(클래스); 형태로 문자열을 받아
var someClass:Class = getDefinitionByName(str) as Class; 식으로 클래스의 참조를 가져온다.
아래는 샘플코드
document 클래스
package { import flash.display.Sprite; import flash.events.MouseEvent; import flash.utils.getDefinitionByName; import flash.utils.getQualifiedClassName; public class TestGetDefinitionAndGetQualifiedClass extends Sprite { public function TestGetDefinitionAndGetQualifiedClass() { var btn:Sprite = new Sprite(); btn.graphics.beginFill(0xffff00); btn.graphics.drawRect(0,0,100,100); btn.graphics.endFill(); btn.buttonMode = true; btn.name = getQualifiedClassName(Box); btn.addEventListener(MouseEvent.CLICK,function(){ var nameClass:Class = getDefinitionByName(btn.name) as Class; var box:Box = new nameClass() as Box; box.y = btn.height + 10; addChild(box); }); addChild(btn); } } }
package { import flash.display.Sprite; import flash.text.TextField; public class Box extends Sprite { public function Box() { graphics.beginFill(0xff0000); graphics.drawRect(0,0,200,100); graphics.endFill(); var tf:TextField = new TextField(); tf.text = "BoxClass"; addChild(tf); } } }
노란색 버튼을 누르면 Box 객체가 생성된다.
활용할 곳이 많을 것 같다. 역시 고수들의 코드를 보면 배우는것이 많다 -..-ㅋ
'ActionScript > Tip' 카테고리의 다른 글
디버그를 쉽게! Arthropod (The easy Flash and AIR Debugger) (0) | 2012.04.02 |
---|---|
메모장,에디트플러스등의 텍스트 로드시 줄바꿈 두줄 문제 (0) | 2011.11.23 |
IDE and Flash Builder sdk 업데이트 (맨날 까먹어서 적어둠;) (0) | 2011.10.12 |
흔한 SWC 를 이용한 폰트 embed 팁 (0) | 2011.08.16 |
티스토리 블로그와 플래시. 그리고 externalInterface 오류. (7) | 2011.03.06 |