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

SketchSample6

see http://gihyo.jp/design/feature/01/frocessing/0004
Get Adobe Flash player
by nutsu 10 Aug 2009
/**
 * Copyright nutsu ( http://wonderfl.net/user/nutsu )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/qvK1
 */

// forked from nutsu's SketchSample5
// forked from nutsu's SketchSample4
// forked from nutsu's SketchSample3
// forked from nutsu's SketchSample2
// forked from nutsu's SketchSample1
// forked from nutsu's PaintSample
// see http://gihyo.jp/design/feature/01/frocessing/0004
package {
    import frocessing.display.F5MovieClip2DBmp;
    import frocessing.geom.FGradientMatrix;
    [SWF(width=465,height=465,backgroundColor=0x000000,frameRate=60)]
    public class SketchSample6 extends F5MovieClip2DBmp
    {
        //加速度運動の変数
        private var xx:Number;
        private var yy:Number;
        private var vx:Number;
        private var vy:Number;
        private var ac:Number;
        private var de:Number;
        //線幅の係数
        private var wd:Number;
        //描画座標
        private var px0:Array;
        private var py0:Array;
        private var px1:Array;
        private var py1:Array;
        //グラデーション用の変数
        private var pc:uint;
        private var mtx:FGradientMatrix;
        private var alphas:Array;
        private var ratios:Array;
        
        public function setup():void
        {
            //キャンバスのサイズ指定
            size( 465, 465 );
            //背景の描画
            background( 0 );
            //HSV
            colorMode( HSV, 1 );
            //初期化
            vx = vy = 0.0;
            xx = mouseX;
            yy = mouseY;
            ac = 0.15;
            de = 0.96;
            wd = 0.05;
            px0 = [xx, xx, xx];
            py0 = [yy, yy, yy];
            px1 = [xx, xx, xx];
            py1 = [yy, yy, yy];
            //グラデーション用の変数
            pc = 0;
            mtx = new FGradientMatrix();
            alphas = [1.0,1.0];
            ratios = [0,255];
        }
        
        public function draw():void
        {
            if ( isMousePressed )
                background( 0 );
            //描画
            drawing( mouseX, mouseY );
        }
        
        private function drawing( x:Number, y:Number ):void
        {
            var px:Number = xx;
            var py:Number = yy;
            //加速度運動
            xx += vx += ( x - xx ) * ac;
            yy += vy += ( y - yy ) * ac;
            
            //新しい描画座標
            var x0:Number  = px + vy*wd;
            var y0:Number  = py - vx*wd;
            var x1:Number  = px - vy*wd;
            var y1:Number  = py + vx*wd;
            
            //グラデーション形状指定
            var c:uint = color( random(0.95, 1), random(0.2, 1), random(0.3, 1) );
            mtx.createLinear( px0[1], py0[1], px0[2], py0[2] );
            
            //描画
            noStroke();
            beginGradientFill( "linear", [pc,c], alphas, ratios, mtx );
            beginShape();
            curveVertex( px0[0], py0[0] );
            curveVertex( px0[1], py0[1] );
            curveVertex( px0[2], py0[2] );
            curveVertex( x0, y0 );
            vertex( px1[2], py1[2] );
            curveVertex( x1, y1 );
            curveVertex( px1[2], py1[2] );
            curveVertex( px1[1], py1[1] );
            curveVertex( px1[0], py1[0] );
            endShape();
            endFill();
            //ボーダーの描画
            stroke( 0, 0.2 );
            noFill();
            curve( px0[0], py0[0], px0[1], py0[1], px0[2], py0[2], x0, y0 );
            curve( px1[0], py1[0], px1[1], py1[1], px1[2], py1[2], x1, y1 );
            
            //描画座標
            px0.shift(); px0.push( x0 );
            py0.shift(); py0.push( y0 );
            px1.shift(); px1.push( x1 );
            py1.shift(); py1.push( y1 );
            
            //直前の色の保持
            pc = c;
            
            //減衰処理
            vx *= de;
            vy *= de;
        }
    }
}