// // Blobs (1,300bytes effect) // by Mr.doob // package { import flash.display.Stage; import flash.display.Sprite; import flash.display.Bitmap; import flash.display.BitmapData; import flash.display.MovieClip; import flash.filters.BlurFilter; import flash.utils.getTimer; import flash.geom.Rectangle; import flash.geom.Point; import flash.events.Event; public class Blobs extends Sprite { private var bl : Array = []; private var r : Bitmap; private var c : Sprite; private var rect : Rectangle; private var point : Point = new Point; public function Blobs() { addEventListener(Event.ADDED_TO_STAGE, init); } public function init( e : Event ) : void { removeEventListener(Event.ADDED_TO_STAGE, init); stage.align = "TL"; stage.scaleMode = "noScale"; c = new Sprite(); c.filters = [new BlurFilter(30,30,1)]; addChild(c); r = new Bitmap( new BitmapData( stage.stageWidth, stage.stageHeight, false, 0x00FFFFFF ) ); addChild(r); for (var i:Number = 0; i < 100; i ++) { bl[i] = new MovieClip(); bl[i].graphics.beginGradientFill("radial",[0x000000,0xF7004A],[0xFF,0xFF],[0x00,0x80]); bl[i].graphics.drawCircle(0,0,Math.random()*50+25); bl[i].x = Math.random() * stage.stageWidth; bl[i].y = Math.random() * stage.stageHeight; bl[i].cycle = Math.random() * 100000; c.addChild(bl[i]); } rect = new Rectangle(0,0,stage.stageWidth, stage.stageHeight); addEventListener( Event.ENTER_FRAME, u ); } public function u(e : Event) : void { for (var i:Number = 0; i < 100; i ++) { bl[i].x += Math.sin( ( getTimer() + bl[i].cycle ) * .001 ) * 2; bl[i].y += Math.cos( ( getTimer() + bl[i].cycle ) * .001 ) * 2; bl[i].scaleX = bl[i].scaleY += Math.sin( ( getTimer() + bl[i].cycle ) *.001 ) *.015 ; } r.bitmapData.fillRect(rect,0x00FFFFFF); r.bitmapData.draw(c); r.bitmapData.threshold(r.bitmapData,rect,point,">",0x00800000,0xFFFFFFFF,0x00808080,true); } } } Blobs