표시 목록 방식의 장점

Flash Player 9 이상, Adobe AIR 1.0 이상

ActionScript 3.0에는 표시 객체 유형마다 별도의 클래스가 있습니다. ActionScript 1.0 및 2.0에는 많은 동일한 유형의 객체가 MovieClip 클래스 하나에 모두 포함되어 있습니다.

이 클래스 개별화 및 표시 목록 계층 구조에는 다음과 같은 장점이 있습니다.

  • 보다 효율적인 렌더링 및 메모리 사용 감소

  • 심도 관리 개선

  • 표시 목록 전체 순회

  • 목록 외 표시 객체

  • 보다 쉬운 표시 객체 하위 클래스화

보다 효율적인 렌더링 및 파일 크기 축소

ActionScript 1.0 및 2.0에서는 MovieClip 객체에서만 모양을 그릴 수 있습니다. ActionScript 3.0에는 모양을 그릴 수 있는 간단한 표시 객체 클래스가 있습니다. 이러한 ActionScript 3.0 표시 객체 클래스는 MovieClip 객체에 포함되는 전체 메서드와 속성을 포함하지 않기 때문에, 메모리 및 프로세서 리소스 사용을 줄일 수 있습니다.

예를 들어, 각 MovieClip 객체는 동영상 클립의 타임라인 속성을 포함하지만 Shape 객체는 이 속성을 포함하지 않습니다. 타임라인 관리를 위한 속성은 많은 메모리와 프로세서 리소스를 사용할 수 있습니다. ActionScript 3.0에서는 Shape 객체를 사용하여 성능을 높일 수 있습니다. Shape 객체는 복잡한 MovieClip 객체보다 오버헤드가 적습니다. Flash Player 및 AIR에서 사용되지 않는 MovieClip 속성을 관리할 필요가 없으므로, 속도가 향상되고 객체에서 사용하는 메모리 용량도 감소됩니다.

심도 관리 개선

ActionScript 1.0 및 2.0에서는 심도가 getNextHighestDepth() 와 같은 선형 심도 관리 스키마와 메서드를 통해 관리됩니다.

ActionScript 3.0에는 표시 객체의 심도를 관리하는 보다 편리한 메서드와 속성을 가진 DisplayObjectContainer 클래스가 포함되어 있습니다.

ActionScript 3.0에서는 표시 객체를 DisplayObjectContainer 인스턴스의 자식 목록에서 새 위치로 이동하면 표시 객체 컨테이너에 있는 다른 자식 객체들의 위치가 자동으로 다시 배치되고 표시 객체 컨테이너의 적절한 자식 인덱스 위치에 할당됩니다.

또한 ActionScript 3.0에서는 표시 객체 컨테이너의 모든 자식 객체를 항상 검색할 수 있습니다. 모든 DisplayObjectContainer 인스턴스에는 표시 객체 컨테이너에 있는 자식 수를 나열하는 numChildren 속성이 있습니다. 표시 객체 컨테이너의 자식 목록에는 항상 인덱스가 지정되어 있으므로, 인덱스 위치 0부터 마지막 인덱스 위치( numChildren - 1 )까지 목록의 모든 객체를 검사할 수 있습니다. 이 작업은 ActionScript 1.0 및 2.0에 있는 MovieClip 객체의 메서드와 속성으로는 가능하지 않습니다.

ActionScript 3.0에서는 표시 객체 컨테이너 자식 목록의 인덱스 번호에 빠진 번호가 없기 때문에 표시 목록을 차례대로 쉽게 순회할 수 있습니다. ActionScript 1.0 및 2.0에서보다 표시 목록을 순회하고 객체 심도를 관리하기가 훨씬 쉬워졌습니다. ActionScript 1.0 및 2.0에서는 동영상 클립이 심도 순서에 간격을 두고 객체를 포함할 수 있기 때문에 객체 목록을 순회하기가 어려울 수 있습니다. ActionScript 3.0에서는 표시 객체 컨테이너의 각 자식 목록이 내부적으로 단일 배열로 캐시되므로 인덱스를 기준으로 매우 빠르게 조회할 수 있습니다. 표시 객체 컨테이너의 모든 자식을 매우 빠르게 반복할 수도 있습니다.

ActionScript 3.0에서는 DisplayObjectContainer 클래스의 getChildByName() 메서드를 사용하여 표시 객체 컨테이너의 자식에 액세스할 수도 있습니다.

표시 목록 전체 순회

ActionScript 1.0 및 2.0에서는 Flash 제작 도구에서 그린 벡터 모양과 같은 일부 객체에 액세스할 수 없습니다. ActionScript 3.0에서는 ActionScript에서 만든 객체와 Flash 제작 도구에서 만든 모든 표시 객체를 포함하여 표시 목록에 있는 모든 객체에 액세스할 수 있습니다. 자세한 내용은 표시 목록 순회 를 참조하십시오.

목록 외 표시 객체

ActionScript 3.0에서는 보이는 표시 목록에 없는 표시 객체를 만들 수 있습니다. 이러한 표시 객체를 목록 외 표시 객체라고 합니다. 표시 객체는 표시 목록에 이미 추가된 DisplayObjectContainer 인스턴스의 addChild() 또는 addChildAt() 메서드를 호출할 경우에만 보이는 표시 목록에 추가됩니다.

목록 외 표시 객체를 사용하면, 여러 표시 객체가 포함된 표시 객체 컨테이너가 여러 개 있는 객체처럼 복잡한 표시 객체를 모을 수 있습니다. 표시 객체를 목록 외 상태로 유지하면, 이러한 표시 객체를 렌더링하는 데 처리 시간을 사용하지 않고도 복잡한 객체를 모을 수 있습니다. 그런 다음 필요에 따라 표시 목록에 목록 외 표시 객체를 추가할 수 있습니다. 또한 표시 객체 컨테이너의 자식을 표시 목록 내외 및 표시 목록 내의 원하는 위치로 이동할 수 있습니다.

보다 쉬운 표시 객체 하위 클래스화

ActionScript 1.0 및 2.0에서는 기본 모양을 만들거나 비트맵을 표시하려면 SWF 파일에 새 MovieClip 객체를 추가해야 합니다. ActionScript 3.0에는 DisplayObject 클래스에 Shape, Bitmap 등과 같은 많은 내장 하위 클래스가 포함되어 있습니다. ActionScript 3.0의 클래스는 특정 객체 유형에 대해 더 구체화되어, 내장 클래스의 기본 하위 클래스를 쉽게 만들 수 있습니다.

예를 들어, ActionScript 2.0에서 원을 그리려면 사용자 정의 클래스 객체가 인스턴스화될 때 MovieClip 클래스를 확장하는 CustomCircle 클래스를 만들 수 있습니다. 그러나, 이 클래스는 해당 클래스에 적용되지 않는 MovieClip 클래스의 많은 속성과 메서드(예: totalFrames )를 포함하고 있습니다. ActionScript 3.0에서는 Shape 객체를 확장하는 CustomCircle 클래스를 만들 수 있으므로, MovieClip 클래스에 포함되어 있지만 관련 없는 속성과 메서드는 이 클래스에 포함되지 않습니다. 다음 코드는 CustomCircle 클래스의 예를 보여 줍니다.

import flash.display.*; 
 
public class CustomCircle extends Shape 
{ 
    var xPos:Number; 
    var yPos:Number; 
    var radius:Number; 
    var color:uint; 
    public function CustomCircle(xInput:Number,  
                                        yInput:Number,  
                                        rInput:Number,  
                                        colorInput:uint) 
    { 
        xPos = xInput; 
        yPos = yInput; 
        radius = rInput; 
        color = colorInput; 
        this.graphics.beginFill(color); 
        this.graphics.drawCircle(xPos, yPos, radius); 
    } 
}