package { import flash.events.Event; [SWF(width=300, height=300, backgroundColor=0x000000)] /** * Builds on SquareGradientTest to show how a shader can be animated * by altering its properties over time. */ public class graphic_flex_image_effects_05_Flex_AnimatedSquareGradientTest extends graphic_flex_image_effects_05_Flex_SquareGradientTest { private static const ROTATION_RATE:Number = 5; private var _rotation:Number; /** * Constructor. Initializes properties. */ public function graphic_flex_image_effects_05_Flex_AnimatedSquareGradientTest() { _rotation = 0; } /** * Updates the shader with new property settings. */ private function updateShader():void { _rotation += ROTATION_RATE; // keeps rotation between 0 and 360 degrees if (_rotation >= 360) { _rotation = 0; } _shaderProxy.rotation = _rotation; _shaderProxy.center = [stage.mouseX, stage.mouseY]; // redraws graphic with updated shader graphics.clear(); graphics.beginShaderFill(_shaderProxy.shader); graphics.drawRect(0, 0, stage.stageWidth, stage.stageHeight); graphics.endFill(); } /** * Draws with shader initially. This override of super class method also sets up * a listener for the ENTER_FRAME event so that the shader can be animated. */ override protected function drawShader():void { super.drawShader(); addEventListener(Event.ENTER_FRAME, onSpriteEnterFrame); } /** * Handler for the ENTER_FRAME event, updating the shader with new settings. * * @param event Event dispatched by this sprite. */ private function onSpriteEnterFrame(event:Event):void { updateShader(); } } }