You use the
beginGradientFill()
and
lineGradientStyle()
methods
of the flash.display.Graphics class to define gradients for use
in shapes. When you define a gradient, you supply a matrix as one
of the parameters of these methods.
The easiest way to define the matrix is by using the Matrix class’s
createGradientBox()
method,
which creates a matrix that is used to define the gradient. You
define the scale, rotation, and position of the gradient using the parameters
passed to the
createGradientBox()
method. The
createGradientBox()
method
accepts the following parameters:
-
Gradient box width: the width (in pixels) to which the
gradient will spread
-
Gradient box height: the height (in pixels) to which the
gradient will spread
-
Gradient box rotation: the rotation (in radians) that will
be applied to the gradient
-
Horizontal translation: how far (in pixels) the gradient
is shifted horizontally
-
Vertical translation: how far (in pixels) the gradient is
shifted vertically
For example, consider a gradient with the following characteristics:
-
GradientType.LINEAR
-
Two colors, green and blue, with the
ratios
array
set to
[0, 255]
-
SpreadMethod.PAD
-
InterpolationMethod.LINEAR_RGB
The following examples show gradients in which the
rotation
parameter
of the
createGradientBox()
method differs as indicated,
but all other settings stay the same:
width = 100;
height = 100;
rotation = 0;
tx = 0;
ty = 0;
|
|
width = 100;
height = 100;
rotation = Math.PI/4; // 45°
tx = 0;
ty = 0;
|
|
width = 100;
height = 100;
rotation = Math.PI/2; // 90°
tx = 0;
ty = 0;
|
|
The following examples show the effects on a green-to-blue linear
gradient in which the
rotation
,
tx
,
and
ty
parameters of the
createGradientBox()
method
differ as indicated, but all other settings stay the same:
width = 50;
height = 100;
rotation = 0;
tx = 0;
ty = 0;
|
|
width = 50;
height = 100;
rotation = 0
tx = 50;
ty = 0;
|
|
width = 100;
height = 50;
rotation = Math.PI/2; // 90°
tx = 0;
ty = 0;
|
|
width = 100;
height = 50;
rotation = Math.PI/2; // 90°
tx = 0;
ty = 50;
|
|
The
width
,
height
,
tx
,
and
ty
parameters of the
createGradientBox()
method
affect the size and position of a
radial
gradient fill as
well, as the following example shows:
width = 50;
height = 100;
rotation = 0;
tx = 25;
ty = 0;
|
|
The following code produces the last radial gradient illustrated:
import flash.display.Shape;
import flash.display.GradientType;
import flash.geom.Matrix;
var type:String = GradientType.RADIAL;
var colors:Array = [0x00FF00, 0x000088];
var alphas:Array = [1, 1];
var ratios:Array = [0, 255];
var spreadMethod:String = SpreadMethod.PAD;
var interp:String = InterpolationMethod.LINEAR_RGB;
var focalPtRatio:Number = 0;
var matrix:Matrix = new Matrix();
var boxWidth:Number = 50;
var boxHeight:Number = 100;
var boxRotation:Number = Math.PI/2; // 90°
var tx:Number = 25;
var ty:Number = 0;
matrix.createGradientBox(boxWidth, boxHeight, boxRotation, tx, ty);
var square:Shape = new Shape;
square.graphics.beginGradientFill(type,
colors,
alphas,
ratios,
matrix,
spreadMethod,
interp,
focalPtRatio);
square.graphics.drawRect(0, 0, 100, 100);
addChild(square);
Note that the width and height of the gradient fill is determined
by the width and height of the gradient matrix rather than the width
or height that is drawn using the Graphics object. When drawing
with the Graphics object, you draw what exists at those coordinates
in the gradient matrix. Even if you use one of the shape methods
of a Graphics object such as
drawRect()
, the gradient
does not stretch itself to the size of the shape that is drawn—the
gradient’s size must be specified in the gradient matrix itself.
The following illustrates the visual difference between the dimensions
of the gradient matrix and the dimensions of the draw itself:
var myShape:Shape = new Shape();
var gradientBoxMatrix:Matrix = new Matrix();
gradientBoxMatrix.createGradientBox(100, 40, 0, 0, 0);
myShape.graphics.beginGradientFill(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1, 1], [0, 128, 255], gradientBoxMatrix);
myShape.graphics.drawRect(0, 0, 50, 40);
myShape.graphics.drawRect(0, 50, 100, 40);
myShape.graphics.drawRect(0, 100, 150, 40);
myShape.graphics.endFill();
this.addChild(myShape);
This code draws three gradients with the same fill style, specified
with an equal distribution of red, green, and blue. The gradients
are drawn using the
drawRect()
method with pixel
widths of 50, 100, and 150 respectively. The gradient matrix which
is specified in the
beginGradientFill()
method
is created with a width of 100 pixels. This means that the first
gradient will encompass only half of the gradient spectrum, the
second will encompass all of it, and the third will encompass all
of it and have an additional 50 pixels of blue extending to the
right.
The
lineGradientStyle()
method works similarly
to
beginGradientFill()
except that in addition
to defining the gradient, you must specify the thickness of the
stroke using the
lineStyle()
method before drawing.
The following code draws a box with a red, green, and blue gradient
stroke:
var myShape:Shape = new Shape();
var gradientBoxMatrix:Matrix = new Matrix();
gradientBoxMatrix.createGradientBox(200, 40, 0, 0, 0);
myShape.graphics.lineStyle(5, 0);
myShape.graphics.lineGradientStyle(GradientType.LINEAR, [0xFF0000, 0x00FF00, 0x0000FF], [1, 1, 1], [0, 128, 255], gradientBoxMatrix);
myShape.graphics.drawRect(0, 0, 200, 40);
this.addChild(myShape);
For more information on the Matrix class, see
Using Matrix objects
.