topical media & game development
#graphic-flex-image-effects-05-Flex-SquareGradientTest.ax
#graphic-flex-image-effects-05-Flex-SquareGradientTest.ax
[swf]
[flash]
flex
package {
import flash.display.BitmapData;
import flash.display.GradientType;
import flash.display.Shader;
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.Event;
import flash.geom.Matrix;
[SWF(width=300, height=300, backgroundColor=0x000000)]
Demonstrates how a shader could be used for custom fills or strokes in shapes
by loading a shader that draws a square gradient based on a gradient image
passed to the shader for colors.
public class @ax-graphic-flex-image-effects-05-Flex-SquareGradientTest extends Sprite {
protected var _shaderProxy:graphic_flex_image_effects_05_Flex_ShaderProxy;
Constructor. This sets up loading of shader, or applies shader if bytes have been embedded.
public function @ax-graphic-flex-image-effects-05-Flex-SquareGradientTest() {
_shaderProxy = new graphic_flex_image_effects_05_Flex_ShaderProxy("graphic-flex-image-effects-05-assets-squareGradient.pbj");
if (_shaderProxy.shader == null) {
_shaderProxy.addEventListener(Event.COMPLETE, onShaderLoaded);
} else {
drawShader();
}
}
Draws the custom gradient with the shader.
protected function drawShader():void {
var width:Number = stage.stageWidth;
var height:Number = stage.stageHeight;
// center the gradient on the stage
_shaderProxy.center = [width/2, height/2];
// passes a gradient in a bitmap to the shader
_shaderProxy.gradient = getGradient();
graphics.beginShaderFill(_shaderProxy.shader);
graphics.drawRect(0, 0, width, height);
graphics.endFill();
}
Draws a linear gradient into a shape, then captures its bitmap data.
returns: Bitmap data with a horizontal linear gradient drawn into it.
protected function getGradient():BitmapData {
// all the values for the gradient
var colors:Array = [0xFF0000, 0xFF00FF, 0x0000FF, 0x00FFFF, 0x00FF00, 0xFFFF00, 0xFF0000];
var alphas:Array = [1, 1, 1, 1, 1, 1, 1];
var ratios:Array = [0, 38, 84, 125, 171, 214, 255];
var matrix:Matrix = new Matrix();
// gradient will be 360px wide to display all the colors in a 360 degree range;
// height is unimportant for retrieving the colors, so it is made 1px high
matrix.createGradientBox(360, 1);
var shape:Shape = new Shape();
shape.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix);
shape.graphics.drawRect(0, 0, 360, 1);
shape.graphics.endFill();
// draws gradient into bitmap data
var bitmapData:BitmapData = new BitmapData(360, 1);
bitmapData.draw(shape);
return bitmapData;
}
Handler for when the shader loads. This simply calls drawShader().
parameter: event Event dispatched by ShaderProxy.
private function onShaderLoaded(event:Event):void {
drawShader();
}
}
}
(C) Æliens
04/09/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.