flash on 2010-12-20

by noli
♥0 | Line 166 | Modified 2011-02-04 17:09:55 | MIT License
play

ActionScript3 source code

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

package
{
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.display.Sprite;
    import flash.display.Stage;
    import flash.display.StageScaleMode;
    import flash.display.StageAlign;
    import flash.display.StageQuality;
    import flash.geom.ColorTransform;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import flash.geom.Point;
     [SWF(frameRate="60")]
        
    public class mouseStarDust extends Sprite
    {
        public var displayData:BitmapData;
        public var empty:BitmapData;
        public var color:ColorTransform = new ColorTransform(1, 1, 1, 1, -3, -6, -3, 0);
        public var baseBmp:Bitmap;
        public const partNum:int = 100;
        public var totalRect:int = 0;
        public var mouseToggle:int = 0;
        
        public var first:num;
        public var last:num;
        public var cont:num;
        public var temp:num
        
        public function mouseStarDust()
        {
            stage.scaleMode = StageScaleMode.NO_SCALE;
            stage.align = StageAlign.TOP_LEFT;
            stage.quality = StageQuality.LOW;
            
            
            displayData = new BitmapData(stage.stageWidth >> 0, stage.stageHeight >> 0, false, 0x000000);
            baseBmp = new Bitmap(displayData);
            
            this.addChildAt(baseBmp, 0);
            stage.addEventListener(Event.RESIZE, reSize);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, burstRect);
            stage.addEventListener(MouseEvent.CLICK, switchToggle);
            this.addEventListener(Event.ENTER_FRAME , upDate);
            
            
            
            function switchToggle(event:MouseEvent):void
            {
                mouseToggle = 1 - mouseToggle;
                temp = first;
                while(temp)
                {
                    if(mouseToggle)
                    {
                        temp.dx = 0;
                        temp.dy = 0;
                        temp.springX = Math.random() * 0.001 + 0.001;
                        temp.springY = Math.random() * 0.001 + 0.001;
                    }
                    else
                    {
                        temp.dx = Math.random() * -6 + 3;
                        temp.dy = Math.random() * -6 + 3;
                    }
                    temp = temp.next;
                }
            }
            
            function reSize(event:Event):void
            {
                displayData.lock();
                empty = displayData.clone();
                displayData = new BitmapData(stage.stageWidth, stage.stageHeight, false, 0x000000);
                displayData.copyPixels(empty, empty.rect, new Point());
                displayData.unlock();
            }
            
            
            function burstRect(event:MouseEvent):void
            {
                for (var i:int = 0; i < partNum; i++ )
                {
                    var temp:num = new num();
                    temp._x = mouseX;
                    temp._y = mouseY;
                    temp.springX = Math.random() * 0.001 + 0.001;
                    temp.springY = Math.random() * 0.001 + 0.001;
                    if (mouseToggle)
                    {
                        temp.dx = temp.dy = 0;
                    }
                    else
                    {
                        temp.dx = Math.random() * -6 + 3;
                        temp.dy = Math.random() * -6 + 3;
                    }
                    
                    if (first == null)
                    {
                        last = first = temp;
                    }
                    else
                    {
                        temp.prev = last;
                        last.next = temp;
                        last = temp;
                    }
                }
            }
            
            
            function upDate(event:Event):void
            {
                cont = first;
                displayData.lock();
                displayData = displayData.clone();
                
                while (cont)
                {
                    if(mouseToggle)
                    {
                        cont.dx += (mouseX - cont._x) * cont.springX;
                        cont.dy += (mouseY - cont._y) * cont.springY;
                        
                        cont._x += cont.dx;
                        cont._y += cont.dy;
                    }
                    else
                    {
                        cont._x += cont.dx;
                        cont._y += cont.dy;
                    }
                    
                    if((cont._x > stage.stageWidth) || (cont._x < 0) || (cont._y > stage.stageHeight) || (cont._y < 0))
                    {
                        if(!cont.prev)
                        {
                            if(!cont.next)
                            {
                                first = null;
                            }
                            else
                            {
                                cont.next.prev = null;
                                first = cont.next;
                            }
                        }
                        else if(!cont.next)
                        {
                            cont.prev.next = null
                        }
                        else
                        {
                            cont.next.prev = cont.prev;
                            cont.prev.next = cont.next;
                        }
                    }
                    
                    
                    displayData.setPixel(cont._x, cont._y, 0x00bbff);
                    if(!cont.next)
                    {
                        last = cont;
                    }

                    cont = cont.next;
                }//while
                displayData.colorTransform(displayData.rect, color);
                baseBmp.bitmapData = displayData;
                displayData.unlock();
            }
        }
    }
}

final class num
{
    public var _x:Number;
    public var _y:Number;
    public var dx:Number;
    public var dy:Number;
    public var springX:Number;
    public var springY:Number;
    public var next:num;
    public var prev:num;
}