当用户单击“添加形状”按钮时,应用程序将调用 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()
方法通过使用
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
属性。