이 포스팅은 Sprite클래스와 Shape클래스가 무엇이며, 둘의 차이점이 무엇인지를 설명하고 있습니다.
먼저 Flash Player에서 표시객체(DisplayObject)의 하위클래스 구조를 보시면 다음과 같습니다.
*출처 : Adobe LiveDocs
보시다시피 Sprite클래스와 Shape클래스 둘다 화면에 보여지는 표시객체(DisplayerObject)의 자식들 입니다. 즉 두 클래스 모두 도형을 그리는 작업이 가능합니다. 차이점이 있다면 Sprite클래스는 InteractiveObject를 자식이기 때문에 Shape클래스와는 달리 Sprite클래스로 그린 도형에는 어떠한 액션을 줄 수 있습니다. 예를들면 Sprite로 그린 도형은 드래그가 가능하게 할 수 있고, 마우스 클릭 이벤트를 줄 수도 있습니다. Shape클래스로 만든 도형은 불가능 하죠. Shape클래스는 단지 보여지는 도형만 만들 뿐입니다. 하지만 Shape클래스는 Sprite클래스보다 퍼포먼스가 훨씬 뛰어나다고 합니다. 액션을 줄 수 없는 대신, Sprite클래스보다 훨씬 가볍다는 말이죠.
정리하면 다음과 같습니다.
Sprite클래스 |
Shape클래스 |
DisplayObject의 자식(그래픽 요소를 보여줄 수 있음)
| |
표시객체 컨터이너 O (자식표시객체를 포함 할 수 있음) |
표시객체 컨테이너 X (자식표시객체를 포함 할 수 없음) |
상대적 메모리 사용률↑ |
상대적 메모리 사용률↓ |
이벤트 줄 수 있음 (Interaction 속성과 메소드 있음) |
이벤트 줄 수 없음 (Interaction 속성과 메소드 없음) |
Sprite클래스의 주요 속성과 메소드를 정리 하면 다음과 같습니다.
*출처 : okgosu의 액션스크립트 정석
주요 속성과 메소드 |
설명 | |
속성 |
buttonMode : Boolean |
스프라이트 객체를 버튼 모드로 설정함 (마우스를 올리면 손 모양 커서로 바뀜) |
dropTarget : DisplayObject |
드래그되거나 드롭되는 디스플레이 오브젝트 | |
graphics : Graphics |
스프라이트에서 드로잉을 위한 그래픽 객체 | |
hitArea : Sprite |
히트 영역은 사용자 인터랙션을 일으킬 영역으로 별도로 지정하지 않으면 그 Sprite가 그리는 영역이 된다. | |
soundTransform : SoundTransform |
스프라이트의 사운드를 컨트롤 | |
useHandCursor : Boolean |
마우스를 올렸을 때 핸드 커서가 나타나게 할지 여부로, buttonMode가 true일 때 작동함 | |
메소드 |
startDrag(lockCenter:Boolean=false, bounds:Rectangle = null):void |
스프라이트를 드래그할 수 있게 함 |
stopDrag():void |
startDrag()메소드 작동을 멈춤 |
<?xml version="1.0" encoding="utf-8"?>
<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
creationComplete="init();">
<fx:Script>
<![CDATA[
import mx.core.UIComponent;
private function init():void
{
var shapeCircle:Shape = new Shape();
shapeCircle.graphics.beginFill(0xFF0000, 1);
shapeCircle.graphics.drawCircle(100, 100, 100);
var spriteCircle:Sprite = new Sprite();
spriteCircle.graphics.beginFill(0x00FF00, 1);
spriteCircle.graphics.drawCircle(100, 100, 100);
spriteCircle.x = 100;
var container:UIComponent = new UIComponent();
container.addChild(shapeCircle);
container.addChild(spriteCircle);
addElement(container);
}
]]>
</fx:Script>
</s:Application>
*source code:ShapeExample1.fxp
위 예제는 Shape클래스를 이용해 원을 하나 그리고, Sprite클래스를 이용해서 또다른 원을 그리는 예제입니다.
다음은 Shape형 객체 shapeCircle의 속성과 Sprite형 객체 spriteCircle의 속성을 나타냅니다. spriteCircle에서는 shapeCircle에는 없는 InteractiveObject의 속성들을 사용할 수 있습니다.
'Adobe Platform > Flex' 카테고리의 다른 글
Flex에서의 이벤트 흐름 (0) | 2013.02.12 |
---|---|
ActionScript에서 데이터 바인딩 정의(Defining data bindings in ActionScript) (0) | 2013.01.21 |
Flex, Actionscript 디스플레이 표시객체 구조 (0) | 2013.01.09 |
Flex, Actionscript 에서 연관배열(associative array), Dictionary (0) | 2013.01.09 |
Flex의 ClassFactory (0) | 2013.01.08 |