사용자가 [모양 추가] 버튼을 클릭하면 응용 프로그램이 DrawingCanvas 클래스의
addShape()
메서드를 호출합니다. 그러면 다음 예제에서 보듯이 GeometricSprite 하위 클래스 중 하나의 해당 생성자 함수가 호출되어 새 GeometricSprite가 인스턴스화됩니다.
public function addShape(shapeName:String, len:Number):void
{
var newShape:GeometricSprite;
switch (shapeName)
{
case "Triangle":
newShape = new TriangleSprite(len);
break;
case "Square":
newShape = new SquareSprite(len);
break;
case "Circle":
newShape = new CircleSprite(len);
break;
}
newShape.alpha = 0.8;
this.addChild(newShape);
}
각 생성자 메서드는
drawShape()
메서드를 호출합니다. 이 메서드는 Sprite 클래스에서 상속되는 클래스의
graphics
속성을 사용하여 해당 벡터 그래픽을 그립니다. 예를 들어, CircleSprite 클래스의
drawShape()
메서드는 다음과 같은 코드를 포함합니다.
this.graphics.clear();
this.graphics.lineStyle(1.0, this.lineColor, 1.0);
this.graphics.beginFill(this.fillColor, 1.0);
var radius:Number = this.size / 2;
this.graphics.drawCircle(radius, radius, radius);
addShape()
함수의 끝에서 두 번째 행은 DisplayObject 클래스에서 상속되는 표시 객체의
alpha
속성을 설정하므로, 캔바스에 추가된 각 표시 객체는 약간 투명하여 그 뒤에 있는 객체를 볼 수 있습니다.
addChild()
메서드의 마지막 행은 이미 표시 목록에 있는 DrawingCanvas 클래스 인스턴스의 자식 목록에 새 표시 객체를 추가합니다. 그러면 새 표시 객체가 스테이지에 표시됩니다.
응용 프로그램의 인터페이스에는
selectedSpriteTxt
와
outputTxt
의 두 텍스트 필드가 포함됩니다. 이러한 텍스트 필드의 텍스트 속성은 캔바스에 추가되거나 사용자가 선택한 GeometricSprite 객체에 대한 정보로 업데이트됩니다. GeometricSprite 클래스는
toString()
메서드를 다음과 같이 재정의하여 이 정보 보고 작업을 처리합니다.
public override function toString():String
{
return this.shapeType + " of size " + this.size + " at " + this.x + ", " + this.y;
}
shapeType
속성은 각 GeometricSprite 하위 클래스의 생성자 메서드에 있는 해당 값으로 설정됩니다. 예를 들어,
toString()
메서드는 DrawingCanvas 인스턴스에 최근에 추가된 CircleSprite 인스턴스에 대해 다음 값을 반환할 수 있습니다.
Circle of size 50 at 0, 0
DrawingCanvas 클래스의
describeChildren()
메서드는 DisplayObjectContainer 클래스에서 상속되는
numChildren
속성을 사용하여
for
루프에 대한 한도를 설정함으로써 캔바스의 자식 목록을 반복합니다. 다음과 같이 각 자식을 나열하는 문자열이 생성됩니다.
var desc:String = "";
var child:DisplayObject;
for (var i:int=0; i < this.numChildren; i++)
{
child = this.getChildAt(i);
desc += i + ": " + child + '\n';
}
결과 문자열은
outputTxt
텍스트 필드의
text
속성을 설정하는 데 사용됩니다.