※現在、「wonderfl build flash online」求人コンテンツ制作に関してのアンケートを実施中です!みなさまのお力添えを頂いて、続々とアンケート結果が集まっていますが、まだまだ募集しております。ご協力のほど、どうぞよろしくお願いいたします!

wonderfl運営事務局
→アンケートページ(※ログインしてからお答えいただけるようになっています。)

 notice: Flash editor updated! Join the development! Thanks to MiniBuilder


forked from : bouze's hybrid-brush-05 [diff(42)]

FORKED
  1. // forked from bouze's hybrid-brush-06
  2. // forked from bouze's hybrid-brush-05
  3. // forked from bouze's hybrid-brush-04
  4. // forked from bouze's hybrid-brush-03
  5. // forked from bouze's hybrid-brush-02
  6. // forked from bouze's hybrid-brush-01
  7. package 
  8. {
  9.     import flash.display.Bitmap;
  10.     import flash.display.BitmapData;
  11.     import flash.display.BlendMode;
  12.     import flash.display.GradientType;
  13.     import flash.display.Graphics;
  14.     import flash.display.Sprite;
  15.     import flash.display.StageAlign;
  16.     import flash.display.StageQuality;
  17.     import flash.display.StageScaleMode;
  18.     import flash.events.Event;
  19.     import flash.filters.BlurFilter;
  20.     import flash.geom.ColorTransform;
  21.     import flash.geom.Matrix;
  22.     import flash.geom.Point;
  23.     
  24.     /**
  25.      * ...
  26.      * @author bouze
  27.      */
  28.     [SWF(frameRate="60", backgroundColor="#BBCC99")]
  29.     public class Main extends Sprite
  30.     {
  31.         private var drawLayer:Sprite;
  32.         private var particles:Array = new Array();
  33.         private var pNum:int = 10;
  34.         private var maxDistance:Number = 30;
  35.         private var friction:Number = 0.90;
  36.         private var gravity:Number = 0.01;
  37.         private var hardness:Number = 0.2;
  38.         private var joinPointNum:int = 5;
  39.         private var canvas:BitmapData;
  40.         private var refreshRate:int = 1;
  41.         private var blurRate:int = 5;
  42.         private var counter:int = 0;
  43.         
  44.         public function Main()
  45.         {
  46.             init();
  47.         }
  48.         
  49.         private function init():void
  50.         {
  51.             stage.scaleMode = StageScaleMode.NO_SCALE;
  52.             stage.align = StageAlign.TOP_LEFT;
  53.             stage.quality = StageQuality.LOW;
  54.             drawLayer = new Sprite();
  55.             addChild( drawLayer );
  56.             initCanvas();
  57.             initParticles();
  58.             addEventListener( Event.ENTER_FRAME, update );
  59.             stage.addEventListener( Event.RESIZE, setupCanvas );
  60.         }
  61.         
  62.         private function update(e:Event):void
  63.         {
  64.             move();
  65.             draw();
  66.             capture();
  67.         }
  68.         
  69.         private function initParticles():void
  70.         {
  71.             var i:int;
  72.             for (i = 0; i < pNum; i++)
  73.             {
  74.                 var sp:Sprite = new Sprite();
  75.                 //sp.blendMode = BlendMode.OVERLAY;
  76.                 drawLayer.addChild( sp );
  77.                 
  78.                 particles[ i ] =
  79.                 {
  80.                     x: mouseX,
  81.                     y: mouseY,
  82.                     ref: sp,
  83.                     vx: 0,
  84.                     vy: 0
  85.                 };
  86.             }
  87.         }
  88.         private function initCanvas():void
  89.         {
  90.             if ( canvas )
  91.             {
  92.                 canvas.dispose();
  93.             }
  94.             canvas = new BitmapData( stage.stageWidth - 1, stage.stageHeight, true, 0x000000 );
  95.             var bm:Bitmap = new Bitmap( canvas );
  96.             addChild( bm );
  97.         }
  98.         
  99.         private function setupCanvas(e:Event):void
  100.         {
  101.             initCanvas();
  102.         }
  103.         
  104.         private function capture():void
  105.         {
  106.             if ( counter % refreshRate == 0 )
  107.             {
  108.                 canvas.lock();
  109.                 canvas.draw( drawLayer );
  110.                 var ct:ColorTransform = new ColorTransform();
  111.                 if ( counter % blurRate == 0 )
  112.                 {
  113.                     //canvas.applyFilter( canvas, canvas.rect, new Point(), new BlurFilter( 1.1, 1.1, 1 ) );
  114.                     ct = new ColorTransform( 1.00.991.00.990000 );
  115.                 }
  116.                 canvas.colorTransform( canvas.rect, ct );
  117.                 canvas.unlock();
  118.             }
  119.             counter++;
  120.         }
  121.         
  122.         private function move():void
  123.         {
  124.             particles[ 0 ].x = stage.mouseX;
  125.             particles[ 0 ].y = stage.mouseY;
  126.             
  127.             var c:Number;
  128.             for ( c = 1; c < pNum; c++)
  129.             {    
  130.                 var p:Object  = particles[ c ];
  131.                 var pp:Object = particles[ c - 1 ];
  132.                 
  133.                 p.vx *= friction;
  134.                 p.vy *= friction;
  135.                 //尻の方が重たくなるように
  136.                 p.vy += gravity * c * 0.3;
  137.                 p.x += p.vx;
  138.                 p.y += p.vy;
  139.                 
  140.                 var X:Number = p.x - pp.x;
  141.                 var Y:Number = p.y - pp.y;
  142.                 var distance:Number = Math.sqrt( X * X + Y * Y );
  143.                 var angle:Number = Math.atan2( Y, X );
  144.                 
  145.                 if ( distance > maxDistance )
  146.                 {
  147.                     var ox:Number = p.x;
  148.                     var oy:Number = p.y;
  149.                     
  150.                     //強く引っ張ったら伸びるように
  151.                     var tx:Number = pp.x + maxDistance * Math.cos( angle );
  152.                     var ty:Number = pp.y + maxDistance * Math.sin( angle );
  153.                     p.x += ( tx - p.x ) * hardness;
  154.                     p.y += ( ty - p.y ) * hardness;
  155.                     
  156.                     //p.x = pp.x + maxDistance * Math.cos( angle );
  157.                     //p.y = pp.y + maxDistance * Math.sin( angle );
  158.                     p.vx += ( p.x - ox ) * 0.1;
  159.                     p.vy += ( p.y - oy ) * 0.1;
  160.                 }
  161.             }
  162.         }
  163.         
  164.         private function draw():void
  165.         {
  166.             var i:int;
  167.             for (i = 0; i < pNum - joinPointNum; i++) 
  168.             {
  169.                 var p:Array = particles;
  170.                 var mtrx:Matrix = new Matrix();
  171.                 mtrx =  createLinearGradientMatrix( p[ i ].x, p[ i ].y, p[ i + joinPointNum ].x, p[ i + joinPointNum ].y)
  172.                 
  173.                 var g:Graphics = p[ i ].ref.graphics;
  174.                 g.clear();
  175.                 g.beginGradientFill(GradientType.LINEAR, [ 0xFF00AA, 0x00DDDD ], [ 0.30.1 ], [ 96255 ], mtrx);
  176.                 
  177.                 //g.moveTo( p[ i ].x, p[ i ].y );
  178.                 //curveThrough3Pts(g, p[ i ].x, p[ i ].y, p[ i + 1 ].x, p[ i + 1 ].y, p[ i + 2 ].x, p[ i + 2 ].y );
  179.                 //curveThrough3Pts(g, p[ i + 2 ].x, p[ i + 2 ].y, p[ i + 3 ].x, p[ i + 3 ].y, p[ i + 4 ].x, p[ i + 4 ].y );
  180.                 
  181.                 g.moveTo( p[ i ].x, p[ i ].y );
  182.                 var n:int
  183.                 for ( n = 1; n <= joinPointNum; n++ ) 
  184.                 {
  185.                     g.lineTo( p[ i + n ].x, p[ i + n ].y );
  186.                 }
  187.                 
  188.                 g.lineTo( p[ i ].x, p[ i ].y );
  189.                 g.endFill();
  190.             }
  191.         }
  192.         
  193.         /**
  194.          * 三点を通る二次元曲線
  195.          * via 詳説ActionScript 3.0(p.700)
  196.         */
  197.         /*
  198.         private function curveThrough3Pts
  199.         (
  200.             g:Graphics,
  201.             startX:Number,
  202.             startY:Number,
  203.             throughX:Number,
  204.             throughY:Number,
  205.             endX:Number,
  206.             endY:Number
  207.         ):void
  208.         {
  209.             var controlX:Number = ( 2 * throughX ) - 0.5 * ( startX + endX );
  210.             var controlY:Number = ( 2 * throughY ) - 0.5 * ( startY + endY );
  211.             g.moveTo( startX, startY );
  212.             g.curveTo( controlX, controlY, endX, endY );
  213.         }
  214.         */
  215.         /**
  216.          * Make matrix for linear gradient
  217.          * via http://nutsu.com/blog/2009/020921_as_gradient_matrix.html
  218.         */
  219.         private function createLinearGradientMatrix( x0:Number, y0:Number, x1:Number, y1:Number ):Matrix
  220.         {
  221.             var mtrx:Matrix = new Matrix();
  222.             mtrx.createGradientBox( 110, -0.5, -0.5 );
  223.             
  224.             var vx:Number = x1 - x0;
  225.             var vy:Number = y1 - y0;
  226.             var w:Number  = Math.sqrt( vx * vx + vy * vy );
  227.             var r:Number  = Math.atan2( vy, vx );
  228.             var cx:Number = ( x0 + x1 ) / 2;
  229.             var cy:Number = ( y0 + y1 ) / 2;
  230.             
  231.             mtrx.scale( w, 1 );
  232.             mtrx.rotate( r );
  233.             mtrx.translate( cx, cy );
  234.             
  235.             return mtrx;
  236.         }
  237.     }
  238. }
noswf
Get Adobe Flash Player