當使用者按一下 Add Shape 按鈕時,應用程式會呼叫 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()
方法,使用類別的
graphics
屬性 (繼承自 Sprite 類別),繪製適當的向量圖形。例如,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()
函數的倒數第二行會設定顯示物件的
alpha
屬性 (自 DisplayObject 類別繼承),以便讓加入畫布的每一個顯示物件都有些微透明,讓使用者能夠看到背後的物件。
addChild()
方法的最後一行會將新的顯示物件加入 DrawingCanvas 類別實體的子清單中,它本來就已經在顯示清單上,如此會讓新的顯示物件出現在「舞台」上。
應用程式的介面包括兩個文字欄位,
selectedSpriteTxt
和
outputTxt
。這兩個文字欄位的 text 屬性是以有關 (加入至畫布或由使用者選取之) 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()
方法會使用
numChildren
屬性 (繼承自 DisplayObjectContainer 類別) 設定
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
屬性。