Los métodos
beginGradientFill()
y
lineGradientStyle()
de la clase flash.display.Graphics se utilizan para definir los degradados que se utilizarán en las formas. Cuando se define un degradado, se proporciona una matriz como uno de los parámetros de estos métodos.
La forma más fácil de definir la matriz consiste en utilizar el método
createGradientBox()
de la clase Matrix, que crea una matriz que se usa para definir el degradado. La escala, la rotación y la posición del degradado se definen con los parámetros que se pasan al método
createGradientBox()
. El método
createGradientBox()
acepta los siguientes parámetros:
-
Anchura del cuadro del degradado: la anchura (en píxeles) en que se extenderá el degradado
-
Altura del cuadro del degradado: la altura (en píxeles) sobre la que se extenderá el degradado
-
Rotación del cuadro de degradado: la rotación (en radianes) que se aplicará al degradado
-
Traslación horizontal: el desplazamiento horizontal (en píxeles) que se aplicará al degradado
-
Traslación vertical: el desplazamiento vertical (en píxeles) que se aplicará al degradado
Por ejemplo, en el caso de un degradado con las características siguientes:
-
GradientType.LINEAR
-
Dos colores, verde y azul, con el conjunto
ratios
establecido en
[0, 255]
-
SpreadMethod.PAD
-
InterpolationMethod.LINEAR_RGB
En los ejemplos siguientes, se muestran los degradados en los que el parámetro
rotation
del método
createGradientBox()
difiere del modo indicado, pero el resto de valores no cambia:
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;
|
|
En el ejemplo siguiente se muestran los efectos sobre un degradado lineal de verde a azul, en el que los parámetros
rotation
,
tx
y
ty
del método
createGradientBox()
difieren del modo indicado, pero el resto de valores no cambia:
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;
|
|
Los parámetros
width
,
height
,
tx
y
ty
del método
createGradientBox()
también afectan al tamaño y la posición de un relleno con degradado
radial
, tal como se muestra en el ejemplo siguiente:
width = 50;
height = 100;
rotation = 0;
tx = 25;
ty = 0;
|
|
En el siguiente código se muestra el último degradado radial ilustrado:
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);
No hay que olvidar que la anchura y altura del relleno degradado vienen dadas por la anchura y la altura de la matriz de degradado en lugar de por la anchura o la altura dibujadas usando el objeto Graphics. Al dibujar con el objeto Graphics, se dibuja lo que existe en esas coordenadas en la matriz de degradado. Incluso si se usa uno de los métodos de forma de un objeto Graphics, como
drawRect()
, el degradado no se estira hasta adaptarse al tamaño de la forma dibujada, sino que el tamaño del degradado debe especificarse en la propia matriz de degradado.
El siguiente ejemplo ilustra la diferencia visual entre las dimensiones de la matriz de degradado y las dimensiones del dibujo:
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);
Este código dibuja tres degradados con el mismo estilo de relleno especificado una distribución idéntica de rojo, verde y azul. Los degradados se dibujan utilizando el método
drawRect()
con anchuras de 50, 100 y 150 píxeles respectivamente. La matriz de degradado especificada en el método
beginGradientFill()
se crea con una anchura de 100 píxeles. Esto quiere decir que el primer degradado abarcará solo la mitad del espectro del degradado, el segundo lo englobará totalmente y el tercero lo incluirá por completo y además tendrá 50 píxeles más de azul extendiéndose hacia la derecha.
El método
lineGradientStyle()
funciona de forma similar a
beginGradientFill()
excepto en que, además de definir el degradado, es necesario especificar el grosor del trazo utilizando el método
lineStyle()
antes de dibujar. El siguiente código dibuja un cuadrado con un trazo degradado rojo, verde y azul:
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);
Para más información sobre la clase Matrix, consulte
Uso de objetos Matrix
.