In case Flash no longer exists; a copy of this site is included in the Flashpoint archive's "ultimate" collection.

Dead Code Preservation :: Archived AS3 works from wonderfl.net

Super Particle Brush

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

// forked from okoi's ラインを沢山引きます
// forked from okoi's flash on 2010-3-11
package {
    import flash.display.Sprite;
    import flash.display.MovieClip
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.display.Bitmap;
    import flash.display.BitmapData;
    import flash.display.BlendMode;
    
    public class FlashTest extends Sprite {

        var    pathMC:MovieClip = new MovieClip();
        var pathlist:Array = new Array();
        
        var drawBMPData:BitmapData;
        var drawBMP:Bitmap;
        var drawMC:MovieClip = new MovieClip();

        var drawFlag:Boolean = false;
    
        public function FlashTest() {
            // write as3 code here..
            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
            
            // BackGround
            var g:Graphics = graphics;
            g.beginFill( 0x000000 );
            g.drawRect( 0, 0, stage.stageWidth, stage.stageHeight );
            
            //    addMC
            addChild(pathMC);
            
            drawBMPData = new BitmapData( stage.stageWidth,  stage.stageHeight, true, 0x00000000 );
            drawBMP = new Bitmap(drawBMPData);
            addChild(drawBMP);
            
            //    CreatePath
            var p:Path = new Path();

            for ( var i:int = 0; i < 200; i++ )
            {
                p = new Path();
                p.Init(0, 0, 5 + (i/20), 0.5, 50);
                pathlist.push(p);
            }
            
            
            addEventListener(Event.ENTER_FRAME, EnterFrame);
            stage.addEventListener(MouseEvent.MOUSE_DOWN, ChangeDrawFlag );
            stage.addEventListener(MouseEvent.MOUSE_UP, ChangeDrawFlag );
        }
        
        public    function EnterFrame(event:Event):void 
        {
            //    DrawPath
            var g:Graphics = pathMC.graphics;
            g.clear();
            g.beginFill( 0xFFFFFF, 1 );
            //g.lineStyle (10, 0x000000, 1.0);    // 線のスタイル
            
            for each ( var p:Path in pathlist )
            {
                //    マウスの位置更新
                p.SetMousePos( stage.mouseX, stage.mouseY );
                if( !drawFlag )    g.drawCircle( p.point.x, p.point.y, 1 );
            }
            
            //    描画処理
            if ( drawFlag )
            {
                g = drawMC.graphics;
                g.clear();
                
                for ( var i:int = 0; i < pathlist.length - 1; i++ )
                {
                    g.lineStyle (1, pathlist[i].color, 0.1);    // 線のスタイル
                    g.moveTo( pathlist[i].prev.x, pathlist[i].prev.y );
                    g.lineTo( pathlist[i].point.x, pathlist[i].point.y );
                }
                //    書いたデータをビットマップに追加
                drawBMPData.draw( drawMC, null, null, BlendMode.ADD ); 
            }
            
            
        }
        
        public    function ChangeDrawFlag(event:MouseEvent):void 
        {
            if ( drawFlag ) drawFlag = false;
            else             drawFlag = true;

            //var    color:Array = [0xFF0000 , 0xFFFF00 , 0x00FF00 , 0x00FFFF , 0x0000FF];
            
            var colorMax:uint = 0xFFFF;
            var colorMin:uint = 0xFF00;
            
            for ( var i:int = 0; i < pathlist.length - 1; i++ )
            {
                pathlist[i].color = 0xFF0000 + 0xFF00 * (i/(pathlist.length-1));
            }
        }        
    }
}
import flash.display.MovieClip;
import flash.events.Event;
import flash.geom.Point;

    internal class Path extends MovieClip
    {
        var prev:Point = new Point();
        var    point:Point = new Point();
        var mouse:Point = new Point();
        
        var move:Point = new Point();
        
        var accele:Number = 1;
        var slowdown:Number = 1;
        var maxspeed:Number = 1;
        
        var color:uint;
        
        public function Path() 
        {
            super();
            addEventListener(Event.ENTER_FRAME, EnterFrame );
        }
        
        /**
         * 
         * @param    x
         * @param    y
         * @param    accele    マウスから離れて行く時の加速値
         * @param    _effect
         */
        public    function Init(x:int = 0, y:int = 0, _accele:Number = 1, _slowdown:Number = 1, _maxspeed:Number = 20):void 
        {
            prev.x = point.x = x;
            prev.y = point.y = y;
            move.x = 0;
            move.y = 0;
            accele = _accele;
            slowdown = _slowdown;
            maxspeed = _maxspeed;
        }
        
        public    function SetMousePos(x:int, y:int):void
        {
            mouse.x = x;
            mouse.y = y;
        }
        
        public    function EnterFrame(event:Event):void 
        {
            prev.x = point.x;
            prev.y = point.y;
            
            //    マウスとの距離を出す
            //    そこから影響係数を掛けて移動力を出す
            var nowLen:Number = Math.sqrt( (mouse.x - prev.x) * (mouse.x - prev.x) + (mouse.y - prev.y) * (mouse.y - prev.y) );        
            //var power:Number = len * power;
            var rad:Number = Math.atan2((mouse.y - point.y), (mouse.x - point.x));
            
            /*
            move.x /= 0.5;
            move.y /= 0.5;
            
            var    rate:Number = 1 - (len / 100);
            if ( rate < 0 )    rate = 0;
            var power:Number = 1 + rate * 10;
            //if ( 100 - len > 0 ) rate = (100-len)/10;
            power = 1;            
            
            move.x += Math.cos( rad ) * power;
            move.y += Math.sin( rad ) * power;
            */
            
            move.x += Math.cos( rad ) * accele;
            move.y += Math.sin( rad ) * accele;
            
            
            //    移動速度、角度算出
            //    あまりにも速度が大きくなったら正規化する
            var moveS:Number = Math.sqrt( move.x * move.x + move.y * move.y );
            var moveR:Number = Math.atan2(move.y, move.x);
            
            if ( moveS >= maxspeed )
            {
                move.x = Math.cos( moveR ) * maxspeed;
                move.y = Math.sin( moveR ) * maxspeed;
            }
            
            point.x += move.x;
            point.y += move.y;
            
            //    離れていってる時ならスピード減衰
            var nextLen:Number = Math.sqrt( (mouse.x - point.x) * (mouse.x - point.x) + (mouse.y - point.y) * (mouse.y - point.y) );
            if ( nowLen < nextLen )
            {
                move.x *= slowdown;
                move.y *= slowdown;
            }

        }
        
    }