// write as3 code here.. package{ import flash.display.*; import flash.events.*; import flash.geom.Point; import flash.filters.*; public class PerlinTest extends Sprite{ private var octave:uint = 3; private var speed:Number = 3; private var seed:Number = Math.floor(Math.random() * 65536); private var offset_arr:Array = new Array(); private var speed_arr:Array = new Array(); private var bmpData:BitmapData; private var bitmap:Bitmap; private var _emboss:ConvolutionFilter; [SWF(width=465, height=465, backgroundColor=0x0, frameRate=30)] public function PerlinTest(){ bitmap = new Bitmap(); this.addChild(bitmap); _setFilter(); for(var i:int =0; i< octave; i++){ offset_arr.push(new Point(0,0)); speed_arr.push(new Point(speed * (Math.floor(Math.random() * 2) == 0 ? -1 : 1),speed * (Math.floor(Math.random() * 2) == 0 ? -1 : 1))); } this.addEventListener(Event.ENTER_FRAME, enterAction); } private function _setFilter():void{ this._emboss = new ConvolutionFilter(3, 3, [ -8, -7.5, 0, -7, 1, 7, 0, 7, 8 ],1,0,false,true,0x000000); bitmap.filters = [_emboss]; } private function enterAction(e:Event):void{ if(bmpData) bmpData.dispose(); for(var i:int =0; i < offset_arr.length; i++){ offset_arr[i].x += speed_arr[i].x; offset_arr[i].y += speed_arr[i].y; } bmpData = new BitmapData(this.stage.stageWidth, this.stage.stageHeight); bmpData.perlinNoise(this.stage.stageWidth, this.stage.stageHeight, octave, seed, false, true, BitmapDataChannel.ALPHA, false, offset_arr); bitmap.bitmapData = bmpData; } } } code on 2008-12-26