그래픽 데이터 클래스 사용

Flash Player 10 이상, Adobe AIR 1.5 이상

향상된 드로잉 API에서는 각 클래스가 구현하는 인터페이스인 IGraphicsData 유형의 클래스 컬렉션이 flash.display 패키지에 추가되었습니다. IGraphicsData 인터페이스를 구현하는 클래스는 드로잉 API의 메서드에 대한 데이터 컨테이너로 사용됩니다.

IGraphicsData 인터페이스를 구현하는 클래스는 다음과 같습니다.

이러한 클래스를 사용하면 전체 드로잉을 IGraphicsData 유형(Vector.<IGraphicsData>)의 Vector 객체 배열에 저장하여 다른 모양 인스턴스의 데이터 소스로 다시 사용하거나, 드로잉 정보를 나중에 사용할 수 있도록 저장할 수 있습니다.

각 채우기 스타일에 사용할 수 있는 채우기 클래스는 여러 개가 있지만 획 클래스는 하나만 있습니다. 획 클래스는 채우기 클래스를 사용하여 스타일을 정의하므로 ActionScript에는 획에 대한 IGraphicsData 클래스는 하나만 있습니다. 따라서 모든 획은 실제로는 획 클래스와 채우기 클래스입니다. 그렇지 않은 경우 이러한 그래픽 데이터 클래스의 API는 flash.display.Graphics 클래스에서 해당 API가 나타내는 메서드를 미러링합니다.

Graphics 메서드

Data 클래스

beginBitmapFill()

GraphicsBitmapFill

beginFill()

GraphicsSolidFill

beginGradientFill()

GraphicsGradientFill

beginShaderFill()

GraphicsShaderFill

lineBitmapStyle()

GraphicsStroke + GraphicsBitmapFill

lineGradientStyle()

GraphicsStroke + GraphicsGradientFill

lineShaderStyle()

GraphicsStroke + GraphicsShaderFill

lineStyle()

GraphicsStroke + GraphicsSolidFill

moveTo()

lineTo()

curveTo()

drawPath()

GraphicsPath

drawTriangles()

GraphicsTrianglePath

또한 GraphicsPath 클래스에는 고유한 GraphicsPath.moveTo(), GraphicsPath.lineTo(), GraphicsPath.curveTo(), GraphicsPath.wideLineTo()GraphicsPath.wideMoveTo() 유틸리티 메서드가 있으므로 GraphicsPath 인스턴스에 대한 이러한 명령을 손쉽게 정의할 수 있습니다. 이러한 유틸리티 메서드를 사용하면 명령 및 데이터 값을 직접 정의하거나 업데이트하기가 쉽습니다.

IGraphicsData 인스턴스의 컬렉션이 있는 경우 Graphics.drawGraphicsData() 메서드를 사용하여 그래픽을 렌더링합니다. Graphics.drawGraphicsData() 메서드는 드로잉 API를 통해 IGraphicsData 인스턴스의 벡터를 순서대로 실행합니다.

// stroke object 
var stroke:GraphicsStroke = new GraphicsStroke(3); 
stroke.joints = JointStyle.MITER; 
stroke.fill = new GraphicsSolidFill(0x102020);// solid stroke 
 
// fill object 
var fill:GraphicsGradientFill = new GraphicsGradientFill(); 
fill.colors = [0x0000FF, 0xEEFFEE]; 
fill.matrix = new Matrix(); 
fill.matrix.createGradientBox(70,70, Math.PI/2); 
// path object 
var path:GraphicsPath = new GraphicsPath(new Vector.<int>(), new Vector.<Number>()); 
path.commands.push(1,2,2); 
path.data.push(125,0, 50,100, 175,0); 
 
// combine objects for complete drawing 
var drawing:Vector.<IGraphicsData> = new Vector.<IGraphicsData>(); 
drawing.push(stroke, fill, path); 
 
// draw the drawing 
graphics.drawGraphicsData(drawing);

예제의 드로잉에 사용된 패스의 값 하나를 수정하여 보다 복잡한 이미지로 해당 모양을 여러 번 다시 그릴 수 있습니다.

// draw the drawing multiple times 
// change one value to modify each variation 
graphics.drawGraphicsData(drawing); 
path.data[2] += 200; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 150; 
graphics.drawGraphicsData(drawing); 
path.data[2] += 100; 
graphics.drawGraphicsData(drawing); 
path.data[2] -= 50;graphicsS.drawGraphicsData(drawing);

IGraphicsData 객체는 채우기 및 획 스타일을 정의할 수 있지만 채우기 및 획 스타일이 반드시 필요한 것은 아닙니다. 즉, Graphics 클래스 메서드는 스타일을 설정하는 데 사용하고 IGraphicsData 객체는 패스의 저장된 컬렉션을 그리는 데 사용하거나 그 반대로 사용할 수 있습니다.

참고: 위의 예제와 같이 원래 드로잉에 드로잉을 추가하려는 경우가 아니면 새 드로잉을 시작하기 전에 Graphics.clear() 메서드를 사용하여 이전 드로잉을 지웁니다. 패스의 단일 부분이나 IGraphicsData 객체의 컬렉션을 변경할 때는 드로잉 전체를 다시 그려 변경 내용을 확인합니다.

그래픽 데이터 클래스를 사용할 경우 모양은 본질적으로 세 번째 이후의 점에서 닫히므로 세 개 이상의 점을 그릴 때마다 채우기가 렌더링됩니다. 채우기가 닫히더라도 획은 닫히지 않으며 이 비헤이비어는 여러 개의 Graphics.lineTo() 또는 Graphics.moveTo() 명령을 사용할 때와는 다릅니다.