표시 목록을 사용한 작업

모든 ActionScript 3.0 구성 요소는 DisplayObject 클래스에서 상속되기 때문에 이 클래스의 메서드와 속성에 액세스하여 표시 목록과 상호 작용할 수 있습니다. 표시 목록 은 응용 프로그램에서 표시되는 객체와 시각적 요소가 계층 구조를 이룬 것입니다. 이 계층 구조에는 다음과 같은 요소가 있습니다.

  • 최상위 컨테이너인 스테이지

  • 모양, 무비 클립, 텍스트 필드 등의 표시 객체

  • 자식 표시 객체를 포함할 수 있는 특수한 유형의 표시 객체인 표시 객체 컨테이너

표시 목록의 객체 순서에 따라 부모 컨테이너에서 해당 객체의 심도가 결정됩니다. 객체의 심도는 스테이지 또는 표시 컨테이너 안에서 위쪽에서 아래쪽 방향 또는 앞쪽에서 뒤쪽 방향을 기준으로 해당 객체의 위치를 나타냅니다. 심도 순서는 객체가 서로 겹쳐 있는 경우에는 잘 드러나지만 그렇지 않은 경우에도 여전히 존재합니다. 표시 목록에 포함된 모든 객체에는 스테이지에서 특정한 심도가 설정되어 있습니다. 객체를 다른 객체 앞에 배치하거나 뒤로 이동하여 심도를 변경하려면 표시 목록에서 해당 객체의 위치를 변경해야 합니다. 표시 목록에 있는 객체의 기본 순서는 스테이지에서 객체가 배치되는 순서를 나타냅니다. 즉, 표시 목록에서 위치가 0인 객체는 심도 순서에서 맨 아래쪽에 위치합니다.

표시 목록에 구성 요소 추가

DisplayObjectContainer의 addChild() 또는 addChildAt() 메서드를 호출하여 DisplayObjectContainer 객체에 객체를 추가할 수 있습니다. 스테이지에서는 제작하는 동안 객체를 만들어 표시 목록에 추가할 수 있으며, 구성 요소의 경우에는 [구성 요소] 패널에서 스테이지로 구성 요소를 드래그하여 표시 목록에 추가할 수 있습니다. ActionScript를 사용하여 컨테이너에 객체를 추가하려면 먼저 new 연산자와 함께 해당 객체의 생성자를 호출하여 객체의 인스턴스를 만든 다음 addChild() 또는 addChildAt() 메서드를 호출하여 스테이지와 표시 목록에 객체를 배치해야 합니다. addChild() 메서드는 표시 목록의 다음 위치에 객체를 추가하고 addChildAt() 은 지정한 위치에 객체를 추가합니다. 이미 사용 중인 위치를 지정하면 해당 위치에 있는 객체와 그 위쪽에 있는 모든 객체가 1씩 위쪽으로 이동합니다. DisplayObjectContainer 객체의 numChildren 속성에는 포함된 표시 객체의 수가 들어 있습니다. 위치를 지정하여 getChildAt() 메서드를 호출하거나, 객체 이름을 알고 있는 경우 getChildByName() 메서드를 호출하여 표시 목록에서 객체를 검색할 수 있습니다.

참고: ActionScript를 사용하여 구성 요소를 추가할 때 표시 목록에서 이름을 사용하여 구성 요소에 액세스하려면 구성 요소의 이름 속성에 이름을 지정해야 합니다.

다음 예제에서는 표시 목록에 있는 세 가지 구성 요소의 이름과 위치를 보여 줍니다. 우선 NumericStepper, Button 및 ComboBox를 서로 겹치게 스테이지에 드래그한 후 인스턴스 이름을 aNs , aButton aCb 로 각각 지정합니다. 그런 다음, 다음 코드를 타임라인의 프레임 1에 있는 액션 패널에 추가합니다.

var i:int = 0; 
while(i < numChildren) { 
    trace(getChildAt(i).name + " is at position: " + i++); 
}

[출력] 패널에 다음 행이 표시됩니다.

aNs is at position: 0 
aButton is at position: 1 
aCb is at position: 2

표시 목록에서 구성 요소 이동

객체 이름과 해당 객체를 배치할 위치를 메서드의 매개 변수로 지정하여 addChildAt() 메서드를 호출하면 표시 목록에서의 객체 위치와 표시 심도를 변경할 수 있습니다. 예를 들어, 앞의 예제에 다음 코드를 추가하면 NumericStepper를 맨 위에 배치하고 루프를 반복하여 표시 목록에서 구성 요소의 새 위치를 표시할 수 있습니다.

this.addChildAt(aNs, numChildren - 1); 
i = 0; 
while(i < numChildren) { 
    trace(getChildAt(i).name + " is at position: " + i++); 
}

[출력] 패널에 다음과 같이 표시됩니다.

aNs is at position: 0 
aButton is at position: 1 
aCb is at position: 2 
aButton is at position: 0 
aCb is at position: 1 
aNs is at position: 2

또한 NumericStepper는 화면에서 다른 구성 요소 앞에 표시되어야 합니다.

numChildren 은 표시 목록에 있는 객체 수(1~ n )이고 목록에서의 첫 번째 위치는 0입니다. 따라서 목록에 객체가 세 개 있는 경우 세 번째 객체의 인덱스 위치는 2입니다. 이 경우 표시 목록에서의 마지막 위치(또는 표시 심도를 고려했을 때 맨 위에 있는 객체)는 numChildren - 1 이라는 것을 알 수 있습니다.

표시 목록에서 구성 요소 제거

removeChild() removeChildAt() 메서드를 사용하면 표시 객체 컨테이너와 해당 표시 목록에서 구성 요소를 제거할 수 있습니다. 다음 예제에서는 스테이지에 세 개의 Button 구성 요소를 서로 겹치게 배치하고 각 구성 요소에 대한 이벤트 리스너를 추가합니다. 각 Button을 클릭하면 이벤트 핸들러가 해당 구성 요소를 표시 목록과 스테이지에서 제거합니다.

  1. 새 Flash 파일(ActionScript 3.0) 문서를 만듭니다.

  2. [구성 요소] 패널의 Button을 [라이브러리] 패널로 드래그합니다.

  3. [액션] 패널을 열고 기본 타임라인에서 [프레임 1]을 선택한 후 다음 코드를 추가합니다.

    import fl.controls.Button; 
     
    var i:int = 0; 
    while(i++ < 3) { 
        makeButton(i); 
    } 
    function removeButton(event:MouseEvent):void { 
        removeChildAt(numChildren -1); 
    } 
    function makeButton(num) { 
        var aButton:Button = new Button(); 
        aButton.name = "Button" + num; 
        aButton.label = aButton.name; 
        aButton.move(200, 200); 
        addChild(aButton); 
        aButton.addEventListener(MouseEvent.CLICK, removeButton); 
    }

    표시 목록에 대한 자세한 내용은 ActionScript 3.0 프로그래밍 의 "디스플레이 프로그래밍"을 참조하십시오.