package ffffff.exp { import flash.filters.BlurFilter; import ffffff.utils.Cursor; import flash.geom.Matrix; import flash.display.Graphics; import flash.display.Sprite; import flash.filters.ColorMatrixFilter; import flash.events.Event; import flash.geom.Point; import flash.filters.DisplacementMapFilter; import flash.display.BitmapDataChannel; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; /** * @author white */ public class SmokingCursor extends MovieClip { private const WIDTH:Number = 300; private const HEIGHT:Number = 300; private var bmpClouds : BitmapData = new BitmapData(WIDTH,HEIGHT,false); private var pixelsBmp : BitmapData = new BitmapData(WIDTH,HEIGHT,false,0);//,0xFFFFFF); private var origin:Point = new Point(0,0); private var displace : DisplacementMapFilter; private var channels:uint; private var seed:Number; private var baseX:Number = 100; private var baseY:Number = 100; private var sp:Sprite = new Sprite(); private var cursor : Cursor = new Cursor; private var cf : ColorMatrixFilter; public function SmokingCursor() { var bitmap : Bitmap = new Bitmap(bmpClouds); addChild(bitmap); seed = 5; channels = BitmapDataChannel.RED | BitmapDataChannel.BLUE; cf = new ColorMatrixFilter([ 2, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0]); var pixelsBitmap:Bitmap = new Bitmap(pixelsBmp); addChild(pixelsBitmap); addEventListener(Event.ENTER_FRAME, update); var gr : Graphics = sp.graphics; gr.lineStyle(.1,0xFFFFFF); gr.lineTo(WIDTH,0); gr.lineTo(WIDTH,HEIGHT); gr.lineTo(0,HEIGHT); gr.lineTo(0,0); } private function update(evt:Event) :void { var m:Matrix = new Matrix(); m.translate(mouseX, mouseY); pixelsBmp.draw(cursor, m); var blur : BlurFilter = new BlurFilter(3, 3, 1); pixelsBmp.applyFilter(pixelsBmp, pixelsBmp.rect, origin, blur); bmpClouds.perlinNoise(140, 130, 3, seed, true, true, channels, false, [new Point(baseX,baseY), new Point(baseY,baseX), new Point(baseY*2,baseX*2)]); baseX+=1.5; baseY+=.5; bmpClouds.applyFilter(bmpClouds, bmpClouds.rect, origin, cf); displace = new DisplacementMapFilter(bmpClouds, new Point(0, 0), BitmapDataChannel.BLUE,BitmapDataChannel.RED,mouseX/10,5); pixelsBmp.applyFilter(pixelsBmp, pixelsBmp.rect, origin, displace); } } }