/* Compiler options: -default-size=300,300 -default-background-color=0x000000 -optimize=true -default-frame-rate=31 */ package { import flash.display.*; import flash.geom.Rectangle; import flash.filters.* import flash.geom.Point; import flash.events.Event; import flash.net.URLRequest; import flash.util.trace; public class CookieMonster extends MovieClip { private var holder:Bitmap; private var displacementBitmap:BitmapData; private var dFilter:DisplacementMapFilter; private var bFilter:BlurFilter; private var sourceRect:Rectangle; private var origin:Point; private var loader:Loader; private var cookieBitmap:BitmapData; private var cookieRect:Rectangle; private var xCycle:int; private var yCycle:int; public function CookieMonster() { var mybmp:BitmapData = new BitmapData(300,300,true,0x00000000); holder = new Bitmap(mybmp); this.addChild(holder); origin = new Point(0,0); sourceRect = new Rectangle(0,0,300,300); displacementBitmap = new BitmapData(300,300,false,0xFFFFFF); dFilter = new DisplacementMapFilter(displacementBitmap, origin, BitmapDataChannel.RED, BitmapDataChannel.BLUE, 1, 1, DisplacementMapFilterMode.CLAMP); bFilter = new BlurFilter(1.1,1.1,1); xCycle = 0; yCycle = 0; loader = new Loader(); loader.loadeeInfo.addEventListener(Event.COMPLETE, onBitmapLoad); loader.load(new URLRequest("cookie.jpg")); } private function onBitmapLoad(e:Event):void { var cookie:DisplayObject = loader.content; cookieBitmap = new BitmapData(cookie.width, cookie.height); cookieBitmap.draw(cookie); cookieRect = new Rectangle(0,0,cookie.width, cookie.height); holder.addEventListener(Event.ENTER_FRAME, onHolderEnterFrame); } private function onHolderEnterFrame(e:Event):void { xCycle++; yCycle++; var xscale:Number = Math.sin(Number(xCycle) / 20)*10; var yscale:Number = Math.sin(Number(yCycle) / 18)*10; dFilter.scaleX = xscale; dFilter.scaleY = yscale; holder.bitmapData.applyFilter(holder.bitmapData,sourceRect,origin,bFilter); holder.bitmapData.applyFilter(holder.bitmapData, sourceRect, origin, dFilter); //var randomPoint:Point = new Point( Math.round(Math.random()*300), Math.round(Math.random()*300)); var cookiePoint:Point = new Point( xscale * 11 + 150 - (cookieRect.width/2), yscale * 11 + 150 - (cookieRect.height/2)); holder.bitmapData.copyPixels(cookieBitmap, cookieRect, cookiePoint); } } }