/* * WATERRIPPLE * * WaterRipple tries to mimic the behavior of water. It displays an image that when the mouse is moved over it acts as tho it lies underneath water and a finger is run through the water. The code has been slightly tweaked compared to the original Java-code found the link below. Noted in source-code below. * * To recreate, you'll need to have the Flash9 ActionScript3 Preview installed, you can get it at http://labs.adobe.com/technologies/flash9as3preview/ * Create a new 200x200 FLA, and put 'WaterRipple' (without quotes) as its Document Class. Test Movie et voila! * * @author Edwin Heijmen * @version 0.1 * * @see http://www.neilwallis.com/java/water.html */ package { import flash.display.*; import flash.events.*; import flash.net.*; import flash.utils.Timer; public class WaterRipple extends MovieClip { private var imageW:Number; // width private var imageH:Number; // height private var iW2:Number; // half of width private var iH2:Number; // half of height private var hArr:Array = new Array(); // height array used for ripple effect private var tggl:uint = 0; // used to toggle between current and future states private var riprad:uint = 15; // radius used for ripple-distortion // used for loading image, displaying fractal and interaction private var img:Loader; private var bmd:BitmapData; private var bm:Bitmap = null; private var origData:BitmapData; // bitmapdata of original image private var sp:Sprite = new Sprite(); public function WaterRipple () { // constructor // // first load in picture img = new Loader(); img.contentLoaderInfo.addEventListener(Event.COMPLETE, completeHandler); var request:URLRequest = new URLRequest("ggoo_200x200.jpg"); img.load(request); } private function completeHandler (event:Event):void { // loading completed, now we can start digging around // // get width & height imageW = img.contentLoaderInfo.width; imageH = img.contentLoaderInfo.height; iW2 = imageW/2; iH2 = imageH/2; // // create mouselistener sp.graphics.beginFill(0xFFFFFF); sp.graphics.lineTo(imageW,0); sp.graphics.lineTo(imageW,imageH); sp.graphics.lineTo(0,imageH); sp.graphics.lineTo(0,0); sp.graphics.endFill(); addChild(sp); sp.addEventListener("mouseMove",disturb); // // first make sure we can distort image var image:Bitmap = Bitmap(img.content); origData = image.bitmapData; bmd = origData.clone(); bm = new Bitmap(bmd); addChild(bm); // // create height arrays for (var i:uint=0;i<2;++i) { var temp:Array = new Array(); for (var tX:uint=0;tX0)?(i-1):(imageW-1); r = (i0)?(j-1):(imageH-1); b = (j=imageW) ii = imageW-1; else if (ii<0) ii = 0; jj = (j-iH2)*d+iH2; if (jj>=imageH) jj = imageH-1; else if (jj<0) jj = 0; bmd.setPixel(i,j,origData.getPixel(ii,jj)); } } // // update toggle tggl = 1-tggl; } } }