I got this Effect from a friend and its written in Flash but all in Actionscript 3 so it should work for Flex as well ... right ?
The code is posted... Can anyone help get this to work. Its an amazing fire effect. Here is the code. ( PS in Flash CS3 it works great !!! ) <?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="init()"> <mx:Script> <![CDATA[ import flash.display.BitmapData; import flash.geom.Rectangle; import flash.geom.Point; import flash.geom.Matrix; import flash.filters.ColorMatrixFilter; import flash.filters.GlowFilter; import flash.filters.DisplacementMapFilter; private function setFire(mc:MovieClip):MovieClip { // hide the original MC mc.visible =false; // calculate the bounds and apply aa padding offset to accomodate the FX var bounds:Object = mc.getBounds(mc); var offset_y:Number =30 var offset_x:Number =10 var w:Number = bounds.width +offset_x var h:Number = bounds.height +offset_y bounds.x=bounds.x-offset_x/2 bounds.y=bounds.y-offset_y/2 // creat our FX copy var clip=new MovieClip(); //create a 'holder' so we can math the original clips registration point exactly var holder:MovieClip=new MovieClip() //add 'clip' to the main display object and add 'holder' as a child of 'clip'. this.addChild(clip); clip.addChild(holder); holder.name="fire_holder"+clip.getChildIndex(holder); // set up our bitmap data var fireMC:Bitmap=new Bitmap(); var shad:Bitmap=new Bitmap() var grad:Sprite=new Sprite();; // set up the flame colouring var fillType:String = GradientType.LINEAR; var colors:Array var glow:GlowFilter // try some different colour flames out here: colors = [0xFF0000, 0xFF6600, 0xFFCC00, 0xFFFFFF] //colors = [0x33FFFF, 0x3399FF, 0x33FFFF, 0xFFFFFF] //colors = [0x006600, 0x009900, 0x00CC00, 0xFFFFFF] //colors = [0xCC0099, 0xFF66FF, 0xFFCCFF, 0xFFFFFF] //colors = [0x9900FF, 0xCC99FF,0xCCCCFF, 0xFFFFFF] var alphas:Array = [100, 100, 100, 100]; var ratios:Array = [90, 110,130, 255]; var interpolationMethod:String= InterpolationMethod.LINEAR_RGB var matr:Matrix = new Matrix(); matr.createGradientBox( w, h, -(270/180)*Math.PI,0, h); var spreadMethod:String = SpreadMethod.REFLECT; // draw the flame colouring grad.graphics.beginGradientFill(fillType, colors, alphas, ratios, matr, spreadMethod, interpolationMethod); grad.graphics.moveTo(0, 0); grad.graphics.lineTo(w, 0); grad.graphics.lineTo(w, h); grad.graphics.lineTo(0, h); grad.graphics.lineTo(0, 0); grad.graphics.endFill(); //holder.addChild(grad);//uncomment this to see that your gradient is working properly // create a glow filter glow = new GlowFilter(colors[1], 1, 13, 13, 2, 1, false, false); // set up our bitmap data var gradBmp:BitmapData = new BitmapData(w, h, true, 0x00000000); gradBmp.draw(grad); var bitmap:BitmapData = new BitmapData(w, h, true, 0x00000000); var fireBitmap:BitmapData = new BitmapData(w, h, true, 0x00000000); // copy the original MC bitmap.draw(mc, new Matrix(1,0,0,1,bounds.x*-1,bounds.y*-1)); // set x and y positions holder.x=bounds.x holder.y=bounds.y clip.x=mc.x; clip.y=mc.y; // combine the gradient colours with the non alpha'd area of the MC bitmap.copyPixels(gradBmp, gradBmp.rect, new Point(0,0), bitmap, new Point(0, 0), true); // create a silhouette to sit on top var shadowMap:BitmapData = bitmap.clone(); // add the fire mc to the display object fireMC.bitmapData=fireBitmap holder.addChild(fireMC) var matrix:Array = new Array(); matrix = matrix.concat([-1, 0, 0, 0, 0]); matrix = matrix.concat([0, -1, 0, 0, 0]); matrix = matrix.concat([0, 0, -1, 0, 0]); matrix = matrix.concat([0, 0, 0, 1, 0]); var darken = new ColorMatrixFilter(matrix); var offset = new Point(0, 0); var yOff = 4; // create our displacement map bitmap data var disp:BitmapData = new BitmapData(w, h); // create our offsets var offsets = new Array(); // create a blur filter var blur1 = new flash.filters.BlurFilter(3,20, 1); offsets.push(new flash.geom.Point()); //create a random seed var seed= Math.round(Math.random()*300); var p = new Point() // apply static FX to the shadow map shadowMap.applyFilter(shadowMap,shadowMap.rect,p,darken) shadowMap.applyFilter(shadowMap,shadowMap.rect,p,glow) // redraw loop var redraw = function():void { //increment offset offsets[0].y += yOff; // create perlin noise for displacement filter disp.perlinNoise(20, 30, 1, seed, true, true, 1, false, offsets); // create displacement filter var displaceFilter:DisplacementMapFilter = new DisplacementMapFilter(disp, offset, 1, 1, 50, 50, 'color'); // apply filters to bitmap datat fireBitmap.applyFilter(bitmap, bitmap.rect, p,blur1) fireBitmap.applyFilter(fireBitmap, bitmap.rect,p,displaceFilter) //copy the shadow map var fireshadowMap=fireBitmap.clone(); // combine the bitmap data fireBitmap.copyPixels(shadowMap, shadowMap.rect, p, shadowMap,p, true); fireBitmap.copyPixels(fireshadowMap, shadowMap.rect, p, fireshadowMap,p, true); }; // add loop clip.addEventListener("enterFrame",redraw); // swap depths with original mc (comment out mc.visible=false to use) this.swapChildren(clip, mc) //create kill datat clip.bitmap1=bitmap clip.bitmap2=gradBmp clip.bitmap3=shadowMap clip.bitmap4=disp clip.listener=redraw clip.original=mc; // return a reference to the new FX MC return clip; } private function removeFX(clip:MovieClip):void { clip.removeEventListener("enterFrame", clip.listener); clip.original.visible=true; clip.bitmap1.dispose(); clip.bitmap2.dispose(); clip.bitmap3.dispose(); clip.bitmap4.dispose(); this.removeChild(clip); } private function init():void { // to call the fx //fxClip:MovieClip=setFire(mc:MovieClip):MovieClip; var flamingText = setFire(bb as MovieClip)// // to get rid of the FX: //removeFX(flamingText) } ]]> </mx:Script> <mx:Button x="140" y="118" label="Button" id="bb" click="{setFire(this as MovieClip)}"/> </mx:Application>