package { import flash.display.Bitmap; import flash.display.Sprite; import flash.events.Event; import flash.display.BitmapData; import flash.filters.BlurFilter; import flash.geom.Point; import flash.geom.Rectangle; /** * ... * @author narongrit : heart@hotdoflash.net */ [SWF(frameRate="30",backgroundColor="#FFFFFF")] public class Main extends Sprite { private var world:Sprite; private var bmp:BitmapData; private var time:Number = 0; private var particles:Array; private var pipe:Number; private var blurFilter:BlurFilter = new BlurFilter(10 , 10, 3); private var bmpCopy:BitmapData; private var mouseP:Particle; //[Embed(source = 'bg.jpg')] //private var BG:Class; public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point /*var bg:Bitmap= new BG(); addChild(bg); bg.width = stage.stageWidth; bg.height = stage.stageHeight;*/ world = new Sprite(); bmp = new BitmapData(stage.stageWidth , stage.stageHeight, true , 0xFF000000); bmpCopy = new BitmapData(stage.stageWidth , stage.stageHeight, true,0xFF000000); var bitmap:Bitmap = new Bitmap(bmp) bitmap.cacheAsBitmap = true; addChild(bitmap); /*var b1:Bitmap = new Bitmap(bmpCopy); addChild(b1); b1.x = 0; b1.scaleX = b1.scaleY = 0.3;*/ pipe = stage.stageWidth/2; particles = new Array(); for (var i:int = 0 ; i <= 200 ; i++ ) { var p:Particle = new Particle(); world.addChild(p); particles.push(p); p.x = pipe + ((Math.random() * 20) -10); p.y = -(Math.random() * 1500); p.speedY = 3; p.speedX = 0; } mouseP = new Particle(); mouseP.scaleX = mouseP.scaleY = 5; mouseP.visible = false; world.addChild(mouseP); mouseP.startDrag(true); this.addEventListener(Event.ENTER_FRAME , update ); } private function update(e:Event):void { for (var i:String in particles) { var sp:Particle = particles[i] as Particle; sp.y += sp.speedY; sp.x += sp.speedX; sp.speedY += 0.2; if (sp.y > stage.stageHeight ) { sp.y = -50; sp.speedY = 1+(Math.random()*5); sp.speedX = 0; sp.x = pipe + ((Math.random() * 20) - 10); } if ( sp.hitTestObject(mouseP)) { sp.speedY = -(sp.speedY/4); sp.speedX = (Math.random() * 4) - 2; } } bmpCopy.fillRect(bmpCopy.rect, 0x00000000); bmpCopy.draw(world , null, null, null, new Rectangle(0, 0, stage.stageWidth , stage.stageHeight ), false); bmpCopy.applyFilter(bmpCopy , bmpCopy.rect, new Point(0, 0), blurFilter); bmp.fillRect(bmp.rect, 0x00000000); bmp.threshold(bmpCopy , bmp.rect , new Point() , ">", 0X00FF0000 , 0xEE69b0fe, 0xEEFF0000, false); //bmp.applyFilter(bmp, bmp.rect, new Point(), new BlurFilter()); } } } import flash.display.Sprite; class Particle extends Sprite { public var speedX:Number; public var speedY:Number; public function Particle() { this.graphics.beginFill(0x00FFFFFF, 0.5); this.graphics.drawCircle(0, 0, 2); } } Liquid Particle