[AS 3.0] getDefinitionByName() 함수

ActionScript 3.0 — Tags: , , — Siaa @ 2:07 pm

getDefinitionByName() 함수는 매개 변수로 지정된 클래스의 클래스 객체에 대한 참조를 반환합니다.
어떤건가 하면… 예를들어,
FLA파일을 작성하고 라이브러리에 무비클립을 등록하고서, Linkage를 통해 Class를 지정해 주었을 때 이놈을 스테이지로 끄집어 낼 수가 있죠. 간단히 아래처럼 할 수 있겠지요~

var myMC:MC1 = new MC1();
addChild(myMC);

그런데, 아래 이미지처럼 Linkage를 통해 Class를 지정해 준 놈이 많고, 게다가 Class이름이 일정한 규칙(MC1, MC2, MC3, …)을 갖고 있을 때,
getdefinitionbyname
요거 for문을 사용하면 먼가 될 거 같은 생각이 듭니다.
그런데, for문과 배열을 이용해서 변수를 규칙적으로 만들 수는 있지만 new연산자의 클래스를 각각 다르게 지정하는 건 안되죠..
요럴 때 getDefinitionByName()함수를 사용하면 편합니다.
레퍼런스에도 나와있지만

  1.  Class유형의 변수 ClassReference를 getDefinitionByName()를 이용해서 원하는 클래스에 할당합니다.
  2.  instance라는 ClassReference의 인스턴스를 인스턴스화 하고…
  3.  원하는 속성값을 지정하고서 끄집어내면 됩니다.
for(var i:Number = 1; i <= 5; i++){
	var ClassReference:Class = getDefinitionByName("MC" + i) as Class;
	var instance:Object = new ClassReference();
	instance.x = 100 * i;
	instance.y = 50;
	instance.buttonMode = true;
	instance.name = "Circle" + i
	instance.addEventListener(MouseEvent.CLICK, onClickFunc);
	addChild(DisplayObject(instance));
}

function onClickFunc(e:MouseEvent):void{
	trace(e["target"].name);
}

Share

2 Comments »

  1. 이부분 진짜 이해가 안되었는데 덕택에 이해가 가요.. 근데 위에 addchild로만으로 for문을 돌려서는 안될까용??? 문자열을 클래스 인스턴스로 만들어서 다시 오브젝트 인스턴스로 찍어야만 .. 하느거죠?? 아짐 완전초보라 물으면서도 뭔말인지..

    Siaa Reply:

    라이브러리에만 등록이 되어있고, 클래스 정의가 되어있지 않기 때문에
    우선 클래스로 정의시키는 과정이 필요하기 때문 아닐까요?

    Comment by 냠냠 — 2010/11/18 @ 12:25 pm

RSS feed for comments on this post. TrackBack URI

Leave a comment

This work is licensed under a Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.
(c) 2012 blog.flasia.com | powered by WordPress with Barecity