使用图形数据类

Flash Player 10 和更高版本,Adobe AIR 1.5 和更高版本

增强的绘图 API 在 flash.display 包中引进了一系列类,类型为 IGraphicsData(每个类实现的接口)。实现 IGraphicsData 接口的类充当绘图 API 的方法的数据容器。

通过这些类,可以将全部绘制存储在 IGraphicsData 类型的矢量对象数组 (Vector.<IGraphicsData>) 中,该数组可以重复用作其他形状实例的数据源,也可以存储绘制信息供以后使用。

请注意,每个填充样式有多个填充类,但只有一个笔触类。ActionScript 只有一个笔触类 IGraphicsData,因为该笔触类使用填充类来定义自己的样式。因此,每个笔触实际上是笔触类和填充类。否则,这些图形数据类的 API 会镜像它们在 flash.display.Graphics 类中表示的方法:

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 对象可以定义填充和笔触样式,但这两种样式并不是必需的。换句话说,可以在使用 IGraphicsData 对象绘制已保存路径集合的同时,使用 Graphics 类方法设置样式,反之亦然。

注: 开始新的绘制之前,请使用 Graphics.clear() 方法清除以前的绘制;除非如上例所示,要在原始绘制的基础上继续绘制。在更改路径或 IGraphicsData 对象集合的某个部分时,请重绘整个绘制来查看所做的更改。

使用图形数据类时,只要绘制了三点或更多点,就会呈示填充,这是因为形状实际上在该点闭合。即使填充闭合,笔触也不会闭合;这一行为与使用多个 Graphics.lineTo()Graphics.moveTo() 命令时不同。