In my previous post i had made a reflection class which makes a nice and need reflection for you. But when you want to reflect an animated clip it did not animate the reflection. Well….. i have made an upgrade on that Reflection class and now you can pass in a parameter if it’s animated or not.
—
Demo:
Animated Reflection
–
–
Usage:
var refl :Reflection = new Reflection( your_clip_to_be_reflected,
reflection_height,
reflection_strenght,
reflection_yOffset,
animated boolean ) ;
addChild( refl );
—
—
View CodeACTIONSCRIPT | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 | package { import flash.display.*; import flash.geom.*; import flash.events.*; public class Reflection extends Sprite { //publics: public var reflectedClip :DisplayObjectContainer; public var reflectionHeight :Number; public var reflectionStrength :Number; public var reflectionOffsetY :Number; public var animating :Boolean = false; //privates: private var reflectionHolder :Sprite; private var bm_reflection :Bitmap; private var refMask :Sprite; private var animated :Boolean; ////////////////////////////////////////////// // CONSTRUCTOR: ////////////////////////////////////////////// public function Reflection( reflectedClip:DisplayObjectContainer, height:Number = 255, strength:Number = 1, reflectionOffsetY:Number = 1, animated:Boolean = false ) { this.reflectedClip = reflectedClip; this.reflectionHeight = height; this.reflectionStrength = strength; this.reflectionOffsetY = reflectionOffsetY; this.animated = animated; build(); } ////////////////////////////////////////////// // BUILDER FUNCTIONS: ////////////////////////////////////////////// private function build():void { buildReflection (); attachItems (); positionElements(); if ( animated ) setListeners(); } private function buildReflection():void { reflectionHolder = new Sprite(); var bmd:BitmapData = new BitmapData( reflectedClip.width, reflectedClip.height, true, 0xc61916 ); bmd.draw( reflectedClip ); bm_reflection = new Bitmap( bmd ); bm_reflection.y = bm_reflection.height; bm_reflection.x = 0; bm_reflection.rotation = 180; bm_reflection.scaleX = -1; bm_reflection.alpha = reflectionStrength; refMask = new Sprite(); var fillType :String = GradientType.LINEAR; var colors :Array = [0xFFFFFF, 0x0000FF]; var alphas :Array = [100, 0]; var ratios :Array = [0, reflectionHeight]; var matr :Matrix = new Matrix(); var spreadMethod :String = SpreadMethod.PAD; matr.createGradientBox(reflectedClip.height * .9, reflectedClip.width, 0,0, 0); refMask.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod); refMask.graphics.drawRect(0, 0, reflectedClip.height, reflectedClip.width); refMask.y = 0; refMask.x = bm_reflection.width refMask.rotation = 90; bm_reflection.cacheAsBitmap = true; refMask.cacheAsBitmap = true; bm_reflection.mask = refMask; } private function setListeners():void { animationRender( true ); } ////////////////////////////////////////////// // ATTACHER & POSITION FUNCTIONS: ////////////////////////////////////////////// private function attachItems():void { this.addChild( reflectionHolder ); reflectionHolder.addChild( bm_reflection ); reflectionHolder.addChild( refMask ); } private function positionElements():void { this.x = reflectedClip.x; this.y = reflectedClip.y + reflectedClip.height + reflectionOffsetY; } ////////////////////////////////////////////// // ANIMATION RENDERER: ////////////////////////////////////////////// public function animationRender( confirm:Boolean ):void { if ( confirm ) { animating = true; this.addEventListener( Event.ENTER_FRAME, render ) } else { animating = false this.removeEventListener( Event.ENTER_FRAME, render ) } } private function render( evt:Event ):void { bm_reflection.bitmapData.fillRect( bm_reflection.getRect(bm_reflection), 0x00ffffff ); bm_reflection.bitmapData.draw( reflectedClip ) } ////////////////////////////////////////////// // KILL FUNCTION: ////////////////////////////////////////////// public function kill():void { reflectionHolder.removeChild( refMask ); reflectionHolder.removeChild( bm_reflection ); this.removeChild( reflectionHolder ); } } } |
–
Have fun,
Rackdoll

The [AS3.0] Animated Reflection Class by Script.it, unless otherwise expressly stated, is licensed under a Creative Commons Attribution-Noncommercial-No Derivative Works 3.0 Netherlands License.
