I love milk

by Jacky.Riawan
move mouse around
♥0 | Line 101 | Modified 2010-09-12 19:57:29 | MIT License
play

ActionScript3 source code

/**
 * Copyright Jacky.Riawan ( http://wonderfl.net/user/Jacky.Riawan )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/xLn5
 */

package  
{
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.BlurFilter;
    import flash.filters.GlowFilter;
    import flash.geom.Point;
    /**
     * ...
     * @author Jacky Riawan
     */
     [SWF(backgroundColor="0x000000")]
    public class splat extends Sprite
    {
        public var blobList:Vector.<blob> = new Vector.<blob>()
        private var bitmapData:BitmapData;
        private var holder:Sprite;
        public function splat() 
        {
            bitmapData = new BitmapData(stage.stageWidth, stage.stageHeight, true,0x000000000)
            var bitmap:Bitmap = new Bitmap(bitmapData)
            holder = new Sprite()
            addChild(holder)
            var blobber:blob=new blob(stage.stageWidth / 2,stage.stageHeight / 2,125,holder,this)
            blobList.push(blobber)
            holder.addChild(blobber)
            addChild(bitmap)
            addEventListener(Event.ENTER_FRAME,render)
        }
        
        private function render(e:Event):void 
        {
            bitmapData.fillRect(bitmapData.rect, 0x00000000)
            
            bitmapData.draw(holder)
            bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point(0, 0), new BlurFilter(18, 18, 15))
            
            bitmapData.threshold(bitmapData, bitmapData.rect, new Point(), ">", 0x80FFFFFFF, 0xFFFFFFFFF, 0xFFFFFFFFF)
            bitmapData.applyFilter(bitmapData, bitmapData.rect, new Point(0, 0), new GlowFilter(0xFFFFFFFF,1,4,4,10,1))
            blobList.sort(compare)
        }
        private function compare(blob1:blob, blob2:blob):void {
            var constrain:Number = Math.max(700, Math.pow(blob1.width*2, 2))
            var distx:Number = blob1.x - blob2.x
            var disty:Number = blob1.y - blob2.y
            var dist:Number=Math.pow(distx,2)+Math.pow(disty,2)
            var angle:Number = -Math.atan2(distx, disty);
            if(dist<constrain){
                blob1.speedx += ((dist-constrain)*Math.sin(angle))/constrain;
                blob1.speedy -= ((dist-constrain)*Math.cos(angle))/constrain;
                blob2.speedx -= ((dist-constrain)*Math.sin(angle))/constrain;
                blob2.speedy += ((dist-constrain) * Math.cos(angle))/constrain;
            }
            blob1.update()
            blob2.update()
        }
        
    }
    
}
import flash.display.Sprite;
import flash.events.MouseEvent;
class blob extends Sprite {
    public var speedx:Number = 0
    public var speedy:Number = 0
    private var myParent:splat
    private var myHolder:Sprite
    public function blob(posx:Number, posy:Number, size:Number, hold:Sprite, parent:splat) {
        myHolder=hold
        myParent=parent
        graphics.lineStyle(1, 0xFFFFFF)
        graphics.beginFill(0xFFFFFF,1)
        graphics.drawCircle(0, 0, size)
        x = posx
        y = posy
        addEventListener(MouseEvent.ROLL_OVER,split)
    }
    
    private function split(e:MouseEvent):void 
    {
        
        if(width>1){
            var obj1:blob = new blob(myParent.mouseX+.5+Math.random(), myParent.mouseY+.5+Math.random(), width / 3,myHolder, myParent)
            var obj2:blob = new blob(myParent.mouseX-.5-Math.random(), myParent.mouseY-.5-Math.random(), width / 3,myHolder, myParent)
            myParent.blobList.push(obj1,obj2)
            myHolder.addChild(obj1)
            myHolder.addChild(obj2)
        }
        removeEventListener(MouseEvent.ROLL_OVER,split)
        myParent.blobList.splice(myParent.blobList.indexOf(this,0),1)
        myHolder.removeChild(this)
        
    }
    public function update():void {
        x += speedx
        y += speedy
        speedx *= .9
        speedy *= .9
        if (x < 0) {
            x = stage.stageWidth
        }else if (x > stage.stageWidth) {
            x=0
        }
        if (y < 0) {
            y = stage.stageHeight
        }else if (y > stage.stageHeight) {
            y=0
        }
    }
}