[AS3] root 변수 참조 방법

Programming/ActionScript 3.0 2007. 7. 4. 04:42
root에 있는 변수나 메소드에 접근할 때 actionscript 2.0에서는 _root를 절대적 참조 영역으로 사용하였으나 as3부터는 _root를 통해 직접적으로 변수나 함수를 참조할 수가 없다.

as3에서 root영역에 있는 변수나 함수를 참조하기 위해서는 아래와 같은 형태로 가능하다. (코드의 일부 개념적인 부분은 한상훈님의 설명을 참조하였다.)  'ADDED_TO_STAGE'라는 이벤트는 constructor를 통해서 인스턴스를 생성할 때 메모리 영역을 할당 받기 전의 참조로 인한 문제를 방지하기 위해 사용한 듯한데 아직까지 as3의 개념이 확실히 잡히지 않았다.






import flash.events.MouseEvent;
import flash.events.Event;

var menu_num:Number = 100;

mc.buttonMode = true;
mc.addEventListener(MouseEvent.CLICK, clickHandler);

function clickHandler(evt:Event):void{
var rootTest:RootTest = new RootTest();
addChild(rootTest);
rootTest.getTrace();
}

package{
import flash.display.MovieClip;
import flash.events.Event;

public class RootTest extends MovieClip{

private var _root:MovieClip;

public function RootTest(){
addEventListener(Event.ADDED_TO_STAGE, initialize);
}
private function initialize(evt:Event):void{
removeEventListener(Event.ADDED_TO_STAGE, initialize);
_root = root as MovieClip;//or MovieClip(root);
}
public function getTrace():void{
trace(stage);
trace(_root.menu_num);
}
}}
출력 :
[object Stage]
100

    

설정

트랙백

댓글

  • 봉봉이 2008.01.24 01:28 ADDR 수정/삭제 답글

    Event.ADDED_TO_STAGE를 이용한다는 정도만 알고 있었는데....
    이렇게 풀어주시다니 좋은 정보 감사드립니다.^^

    • jasu 2008.01.24 11:10 신고 수정/삭제

      ^^ 저도 여러곳 찾아다니면서 정보 얻고 있네요 즐겁게 공부하세요

  • AS3 2008.12.11 00:00 ADDR 수정/삭제 답글

    검은 바탕에 있는 글씨를 보려니 불편합니다. 폰트크기도 작고 색도 회색과 푸른색 그런 것들인데, 흰색바탕에 검정색을 사용해주시던가 검은색 바탕으로 가려면 흰색 글씨를 써주시던가 했으면 합니다. 모처럼 액션스크립트를 올려주신 것에 대하면 그 수고가 별로 드러나지 않는 것 같습니다.

    • jasu 2008.12.17 11:24 신고 수정/삭제

      안녕하세요~ ^^
      개인 블로그인지라 그런 부분에 대해서는 충분히 생각하지 못한 부분이 있네요 나중에 블로그 업그레이드 할 때는 좀더 보기 편하게 개편해 보도록 하겠습니다.
      말씀 감사합니다.

  • codesos 2009.11.11 17:08 ADDR 수정/삭제 답글

    메인에 만든 클래스를 addchild를 해주면 ADDED_TO_STAGE이벤트가 발생해서
    initialize이 함수가 호출되고.. 호출되었다는것은 이클래스가 등록이된것이니
    등록된후에는 메인에 접근이 된다는것 같네요..아무튼 좋은자료 감사해요.

    • jasu 2009.12.03 00:51 신고 수정/삭제

      as3에서는 상당히 중요한 문제입니다.
      addChild를 했더라도 added 이벤트가 발생이된 상태 예상과는 달리 순차적으로 진행되지 않을 수도 있습니다.

      무엇보다 addChild가 되는 대상은 자신이 언제 stage상에 addChild되는지 판단할 수 없기 때문에 가장 흔히 발생하는 런타임 에러의 원인 중에 하나입니다.