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

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

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


FORKED
  1. // forked from clockmaker's Interactive Liquid 10000
  2. // forked from clockmaker's Liquid110000 By Vector
  3. // forked from munegon's forked from: forked from: forked from: forked from: Liquid10000
  4. // forked from Saqoosha's forked from: forked from: forked from: Liquid10000
  5. // forked from nutsu's forked from: forked from: Liquid10000
  6. // forked from nutsu's forked from: Liquid10000
  7. // forked from zin0086's Liquid10000
  8. package {
  9.     /**
  10.     * マウス判定をつけてみました
  11.     * 参照: http://wonderfl.kayac.com/code/8e43498120fd4403504b7987f73d3274d12f1a42
  12.     * 2万パーティクル
  13.     */    
  14.     import flash.display.*;
  15.     import flash.geom.*;
  16.     import flash.events.*;
  17.     import flash.utils.*;
  18.     import flash.geom.*;
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(backgroundColor="ffffff")];
  22.     public class Liquid extends Sprite {
  23.         private const NUM_PARTICLE:uint = 10000;
  24.         private var bmpData:BitmapData = new BitmapData( 465465false, 0x000000 );
  25.         private var forceMap:BitmapData = new BitmapData( 5757false, 0x000000 );
  26.         private var randomSeed:uint = Math.floor( Math.random() * 0xFFFF );
  27.         private var particleList:Vector.<Particle> = new Vector.<Particle>(NUM_PARTICLE, true);
  28.         private var rect:Rectangle = new Rectangle( 00465465 );
  29.         private var seed:Number = Math.floor( Math.random() * 0xFFFF );
  30.         private var offset:Array = [new Point(), new Point()];
  31.         private var colorTransform:ColorTransform = new ColorTransform( 0.9, .85, .851.0 );
  32.         private var timer:Timer;
  33.         private var lastMouseX:Number = 0;
  34.         private var lastMouseY:Number = 0;
  35.         public function Liquid() {
  36.             
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.scaleMode = StageScaleMode.NO_SCALE;
  39.             stage.quality = StageQuality.LOW;
  40.             stage.frameRate = 60;
  41.             
  42.             // 画面に表示用の Bitmap を作ります
  43.             addChild(new Bitmap( bmpData )) as Bitmap;
  44.             
  45.             // フォースマップの初期化をおこないます
  46.             forceMap.perlinNoise( 14143, randomSeed, falsetrue1 | 2 | 0 | 0 );
  47.             
  48.             // パーティクルを生成します
  49.             for (var i:uint = 0; i < NUM_PARTICLE; i++) {
  50.                 var px:Number = Math.random() * 465;
  51.                 var py:Number = Math.random() * 465;
  52.                 particleList[i] = new Particle(px, py);
  53.             }
  54.             
  55.             // ループ処理
  56.             addEventListener( Event.ENTER_FRAME, loop );
  57.             
  58.             // 時間差でフォースマップと色変化の具合を変更しています
  59.             timer = new Timer(10000);
  60.             timer.addEventListener(TimerEvent.TIMER, resetFunc);
  61.             timer.start();
  62.             
  63.             // デバッグ用のスタッツを表示しています
  64.             addChild(new Stats);
  65.         }
  66.         
  67.         private function loop( e:Event ):void {
  68.             bmpData.lock();
  69.             bmpData.colorTransform( rect, colorTransform );
  70.             
  71.             var len:uint = particleList.length;
  72.             var col:Number
  73.             
  74.             var sx:Number = 5000 * (mouseX - lastMouseX);
  75.             var sy:Number = 5000 * (mouseY - lastMouseY);
  76.             var dx:Number, dy:Number;
  77.             var dist:Number;
  78.             
  79.             var mx:int = mouseX;
  80.             var my:int = mouseY;
  81.             
  82.             for (var i:uint = 0; i < len; i++) {
  83.                 
  84.                 var dots:Particle = particleList[i];
  85.                 
  86.                 // マウスの値を適用
  87.                 dx = dots.px - mx;
  88.                 dy = dots.py - my;
  89.                 dist = dx * dx + dy * dy + 50;
  90.                 
  91.                 // ここ上手くやれば高速化できそう
  92.                 col = forceMap.getPixel( dots.px >> 3,  dots.py >> 3);
  93.                 dots.ax += ( (col >> 16 & 0xff) - 128 ) * .0005;
  94.                 dots.ay += ( (col >> 8  & 0xff) - 128 ) * .0005;
  95.                 dots.vx += dots.ax;
  96.                 dots.vy += dots.ay;
  97.                 dots.px += dots.vx  + sx / dist;
  98.                 dots.py += dots.vy  + sy / dist;
  99.                 var _posX:Number = dots.px;
  100.                 var _posY:Number = dots.py;
  101.                     
  102.                 dots.ax *= .96;
  103.                 dots.ay *= .96;
  104.                 dots.vx *= .92;
  105.                 dots.vy *= .92;
  106.                 
  107.                 ( _posX > 465 ) ? dots.px = 0 :
  108.                 ( _posX < 0 ) ? dots.px = 465 : 0;
  109.                 ( _posY > 465 ) ? dots.py = 0 :
  110.                 ( _posY < 0 ) ? dots.py = 465 : 0;
  111.                 
  112.                 bmpData.setPixel( dots.px, dots.py, 0xffffff );
  113.             }
  114.             bmpData.unlock();
  115.             
  116.             lastMouseX = mouseX;
  117.             lastMouseY = mouseY;
  118.         }
  119.         
  120.         private function resetFunc(e:Event):void {
  121.             forceMap.perlinNoise( 14143, seed, falsetrue1|2|0|0false, offset );
  122.             offset[0].x += 1.5;
  123.             offset[1].y += 1.0;    
  124.         }
  125.     }
  126. }
  127. class Particle {
  128.     public var vx:Number = 0;
  129.     public var vy:Number = 0;
  130.     public var ax:Number = 0;
  131.     public var ay:Number = 0;
  132.     public var px:Number;
  133.     public var py:Number;
  134.     function Particle( px:Number, py:Number ) {
  135.         this.px = px;
  136.         this.py = py;
  137.     }
  138. }
noswf
  1. // forked from clockmaker's Interactive Liquid 10000
  2. // forked from clockmaker's Liquid110000 By Vector
  3. // forked from munegon's forked from: forked from: forked from: forked from: Liquid10000
  4. // forked from Saqoosha's forked from: forked from: forked from: Liquid10000
  5. // forked from nutsu's forked from: forked from: Liquid10000
  6. // forked from nutsu's forked from: Liquid10000
  7. // forked from zin0086's Liquid10000
  8. package {
  9.     /**
  10.     * マウス判定をつけてみました
  11.     * 参照: http://wonderfl.kayac.com/code/8e43498120fd4403504b7987f73d3274d12f1a42
  12.     * 2万パーティクル
  13.     */    
  14.     import flash.display.*;
  15.     import flash.geom.*;
  16.     import flash.events.*;
  17.     import flash.utils.*;
  18.     import flash.geom.*;
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(backgroundColor="0")];
  22.     public class Liquid extends Sprite {
  23.         private const NUM_PARTICLE:uint = 1000;
  24.         private var bmpData:BitmapData = new BitmapData( 465465false, 0x000000 );
  25.         private var forceMap:BitmapData = new BitmapData( 5757false, 0x000000 );
  26.         private var randomSeed:uint = Math.floor( Math.random() * 0xFFFF );
  27.         private var particleList:Vector.<Particle> = new Vector.<Particle>(NUM_PARTICLE, true);
  28.         private var rect:Rectangle = new Rectangle( 00465465 );
  29.         private var seed:Number = Math.floor( Math.random() * 0xFFFF );
  30.         private var offset:Array = [new Point(), new Point()];
  31.         private var colorTransform:ColorTransform = new ColorTransform( 0.9, .85, .851.0 );
  32.         private var timer:Timer;
  33.         private var lastMouseX:Number = 0;
  34.         private var lastMouseY:Number = 0;
  35.         public function Liquid() {
  36.             
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.scaleMode = StageScaleMode.NO_SCALE;
  39.             stage.quality = StageQuality.LOW;
  40.             stage.frameRate = 60;
  41.             
  42.             // 画面に表示用の Bitmap を作ります
  43.             addChild(new Bitmap( bmpData )) as Bitmap;
  44.             
  45.             // フォースマップの初期化をおこないます
  46.             forceMap.perlinNoise( 14143, randomSeed, falsetrue1 | 2 | 0 | 0 );
  47.             var bitmap:Bitmap = new Bitmap(forceMap);
  48.                 bitmap.x = 150;
  49.                 bitmap.y = 100;
  50.             addChild(bitmap);
  51.             
  52.             // パーティクルを生成します
  53.             for (var i:uint = 0; i < NUM_PARTICLE; i++) {
  54.                 var px:Number = Math.random() * 465;
  55.                 var py:Number = Math.random() * 465;
  56.                 particleList[i] = new Particle(px, py);
  57.             }
  58.             
  59.             // ループ処理
  60.             addEventListener( Event.ENTER_FRAME, loop );
  61.             
  62.             // 時間差でフォースマップと色変化の具合を変更しています
  63.             timer = new Timer(10000);
  64.            timer.addEventListener(TimerEvent.TIMER, resetFunc);
  65.             timer.start();
  66.             
  67.             // デバッグ用のスタッツを表示しています
  68.             addChild(new Stats);
  69.         }
  70.         
  71.         private function loop( e:Event ):void {
  72.             bmpData.lock();
  73.             bmpData.colorTransform( rect, colorTransform );
  74.             
  75.             var len:uint = particleList.length;
  76.             var col:Number
  77.             
  78.             var sx:Number = 5000 * (mouseX - lastMouseX);
  79.             var sy:Number = 5000 * (mouseY - lastMouseY);
  80.             var dx:Number, dy:Number;
  81.             var dist:Number;
  82.             
  83.             var mx:int = mouseX;
  84.             var my:int = mouseY;
  85.             
  86.             for (var i:uint = 0; i < len; i++) {
  87.                 
  88.                 var dots:Particle = particleList[i];
  89.                 
  90.                 // マウスの値を適用
  91.                 dx = dots.px - mx;
  92.                 dy = dots.py - my;
  93.                 dist = dx * dx + dy * dy + 50;
  94.                 
  95.                 // ここ上手くやれば高速化できそう
  96.                 col = forceMap.getPixel( dots.px >> 3,  dots.py >> 3);
  97.                 dots.ax += ( (col >> 16 & 0xff) - 128 ) * .0005;
  98.                 dots.ay += ( (col >> 8  & 0xff) - 128 ) * .0005;
  99.                 dots.vx += dots.ax;
  100.                 dots.vy += dots.ay;
  101.                 dots.px += dots.vx  + sx / dist;
  102.                 dots.py += dots.vy  + sy / dist;
  103.                 var _posX:Number = dots.px;
  104.                 var _posY:Number = dots.py;
  105.                     
  106.                 dots.ax *= .96;
  107.                 dots.ay *= .96;
  108.                 dots.vx *= .92;
  109.                 dots.vy *= .92;
  110.                 
  111.                 ( _posX > 465 ) ? dots.px = 0 :
  112.                 ( _posX < 0 ) ? dots.px = 465 : 0;
  113.                 ( _posY > 465 ) ? dots.py = 0 :
  114.                 ( _posY < 0 ) ? dots.py = 465 : 0;
  115.                 
  116.                 bmpData.setPixel( dots.px, dots.py, 0xffffff );
  117.             }
  118.             bmpData.unlock();
  119.             
  120.             lastMouseX = mouseX;
  121.             lastMouseY = mouseY;
  122.         }
  123.         
  124.         private function resetFunc(e:Event):void {
  125.        
  126.             forceMap.perlinNoise( 14143, seed, falsetrue1|2|0|0false, offset );
  127.             offset[0].x += 1.5;
  128.             offset[1].y += 1.0;    
  129.         }
  130.     }
  131. }
  132. class Particle {
  133.     public var vx:Number = 0;
  134.     public var vy:Number = 0;
  135.     public var ax:Number = 0;
  136.     public var ay:Number = 0;
  137.     public var px:Number;
  138.     public var py:Number;
  139.     function Particle( px:Number, py:Number ) {
  140.         this.px = px;
  141.         this.py = py;
  142.     }
  143. }
noswf
  1. // forked from clockmaker's Interactive Liquid 10000
  2. // forked from clockmaker's Liquid110000 By Vector
  3. // forked from munegon's forked from: forked from: forked from: forked from: Liquid10000
  4. // forked from Saqoosha's forked from: forked from: forked from: Liquid10000
  5. // forked from nutsu's forked from: forked from: Liquid10000
  6. // forked from nutsu's forked from: Liquid10000
  7. // forked from zin0086's Liquid10000
  8. package {
  9.     /**
  10.     * マウス判定をつけてみました
  11.     * 参照: http://wonderfl.kayac.com/code/8e43498120fd4403504b7987f73d3274d12f1a42
  12.     * 2万パーティクル
  13.     */    
  14.     import flash.display.*;
  15.     import flash.geom.*;
  16.     import flash.events.*;
  17.     import flash.utils.*;
  18.     import flash.geom.*;
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(backgroundColor="0")];
  22.     public class Liquid extends Sprite {
  23.         private const NUM_PARTICLE:uint = 10000;
  24.         private var bmpData:BitmapData = new BitmapData( 465465false, 0x000000 );
  25.         private var forceMap:BitmapData = new BitmapData( 5757false, 0x000000 );
  26.         private var randomSeed:uint = Math.floor( Math.random() * 0xFFFF );
  27.         private var particleList:Vector.<Particle> = new Vector.<Particle>(NUM_PARTICLE, true);
  28.         private var rect:Rectangle = new Rectangle( 00465465 );
  29.         private var seed:Number = Math.floor( Math.random() * 0xFFFF );
  30.         private var offset:Array = [new Point(), new Point()];
  31.         private var colorTransform:ColorTransform = new ColorTransform( 0.9, .85, .851.0 );
  32.         private var timer:Timer;
  33.         private var lastMouseX:Number = 0;
  34.         private var lastMouseY:Number = 0;
  35.         public function Liquid() {
  36.             
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.scaleMode = StageScaleMode.NO_SCALE;
  39.             stage.quality = StageQuality.LOW;
  40.             stage.frameRate = 60;
  41.             
  42.             // 画面に表示用の Bitmap を作ります
  43.             addChild(new Bitmap( bmpData )) as Bitmap;
  44.             
  45.             // フォースマップの初期化をおこないます
  46.             forceMap.perlinNoise( 14143, randomSeed, falsetrue1 | 2 | 0 | 0 );
  47.             
  48.             // パーティクルを生成します
  49.             for (var i:uint = 0; i < NUM_PARTICLE; i++) {
  50.                 var px:Number = Math.random() * 465;
  51.                 var py:Number = Math.random() * 465;
  52.                 particleList[i] = new Particle(px, py);
  53.             }
  54.             
  55.             // ループ処理
  56.             addEventListener( Event.ENTER_FRAME, loop );
  57.             
  58.             // 時間差でフォースマップと色変化の具合を変更しています
  59.             timer = new Timer(10000);
  60.             timer.addEventListener(TimerEvent.TIMER, resetFunc);
  61.             timer.start();
  62.             
  63.             // デバッグ用のスタッツを表示しています
  64.             addChild(new Stats);
  65.         }
  66.         
  67.         private function loop( e:Event ):void {
  68.             bmpData.lock();
  69.             bmpData.colorTransform( rect, colorTransform );
  70.             
  71.             var len:uint = particleList.length;
  72.             var col:Number
  73.             
  74.             var sx:Number = 5000 * (mouseX - lastMouseX);
  75.             var sy:Number = 5000 * (mouseY - lastMouseY);
  76.             var dx:Number, dy:Number;
  77.             var dist:Number;
  78.             
  79.             var mx:int = mouseX;
  80.             var my:int = mouseY;
  81.             
  82.             for (var i:uint = 0; i < len; i++) {
  83.                 
  84.                 var dots:Particle = particleList[i];
  85.                 
  86.                 // マウスの値を適用
  87.                 dx = dots.px - mx;
  88.                 dy = dots.py - my;
  89.                 dist = dx * dx + dy * dy + 50;
  90.                 
  91.                 // ここ上手くやれば高速化できそう
  92.                 col = forceMap.getPixel( dots.px >> 3,  dots.py >> 3);
  93.                 dots.ax += ( (col >> 16 & 0xff) - 128 ) * .0005;
  94.                 dots.ay += ( (col >> 8  & 0xff) - 128 ) * .0005;
  95.                 dots.vx += dots.ax;
  96.                 dots.vy += dots.ay;
  97.                 dots.px += dots.vx  + sx / dist;
  98.                 dots.py += dots.vy  + sy / dist;
  99.                 var _posX:Number = dots.px;
  100.                 var _posY:Number = dots.py;
  101.                     
  102.                 dots.ax *= .96;
  103.                 dots.ay *= .96;
  104.                 dots.vx *= .92;
  105.                 dots.vy *= .92;
  106.                 
  107.                 ( _posX > 465 ) ? dots.px = 0 :
  108.                 ( _posX < 0 ) ? dots.px = 465 : 0;
  109.                 ( _posY > 465 ) ? dots.py = 0 :
  110.                 ( _posY < 0 ) ? dots.py = 465 : 0;
  111.                 
  112.                 bmpData.setPixel( dots.px, dots.py, 0xffffff );
  113.             }
  114.             bmpData.unlock();
  115.             
  116.             lastMouseX = mouseX;
  117.             lastMouseY = mouseY;
  118.         }
  119.         
  120.         private function resetFunc(e:Event):void {
  121.             forceMap.perlinNoise( 14143, seed, falsetrue1|2|0|0false, offset );
  122.             offset[0].x += 1.5;
  123.             offset[1].y += 1.0;    
  124.         }
  125.     }
  126. }
  127. class Particle {
  128.     public var vx:Number = 0;
  129.     public var vy:Number = 0;
  130.     public var ax:Number = 0;
  131.     public var ay:Number = 0;
  132.     public var px:Number;
  133.     public var py:Number;
  134.     function Particle( px:Number, py:Number ) {
  135.         this.px = px;
  136.         this.py = py;
  137.     }
  138. }
noswf
  1. // forked from clockmaker's Interactive Liquid 10000
  2. // forked from clockmaker's Liquid110000 By Vector
  3. // forked from munegon's forked from: forked from: forked from: forked from: Liquid10000
  4. // forked from Saqoosha's forked from: forked from: forked from: Liquid10000
  5. // forked from nutsu's forked from: forked from: Liquid10000
  6. // forked from nutsu's forked from: Liquid10000
  7. // forked from zin0086's Liquid10000
  8. package {
  9.     /**
  10.     * マウス判定をつけてみました
  11.     * 参照: http://wonderfl.kayac.com/code/8e43498120fd4403504b7987f73d3274d12f1a42
  12.     * 2万パーティクル
  13.     */    
  14.     import flash.display.*;
  15.     import flash.geom.*;
  16.     import flash.events.*;
  17.     import flash.utils.*;
  18.     import flash.geom.*;
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(backgroundColor="0")];
  22.     public class Liquid extends Sprite {
  23.         private const NUM_PARTICLE:uint = 10000;
  24.         private var bmpData:BitmapData = new BitmapData( 465465false, 0x000000 );
  25.         private var forceMap:BitmapData = new BitmapData( 5757false, 0x000000 );
  26.         private var randomSeed:uint = Math.floor( Math.random() * 0xFFFF );
  27.         private var particleList:Vector.<Particle> = new Vector.<Particle>(NUM_PARTICLE, true);
  28.         private var rect:Rectangle = new Rectangle( 00465465 );
  29.         private var seed:Number = Math.floor( Math.random() * 0xFFFF );
  30.         private var offset:Array = [new Point(), new Point()];
  31.         private var colorTransform:ColorTransform = new ColorTransform( 0.9, .85, .851.0 );
  32.         private var timer:Timer;
  33.         private var lastMouseX:Number = 0;
  34.         private var lastMouseY:Number = 0;
  35.         public function Liquid() {
  36.             
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.scaleMode = StageScaleMode.NO_SCALE;
  39.             stage.quality = StageQuality.LOW;
  40.             stage.frameRate = 60;
  41.             
  42.             // 画面に表示用の Bitmap を作ります
  43.             addChild(new Bitmap( bmpData )) as Bitmap;
  44.             
  45.             // フォースマップの初期化をおこないます
  46.             forceMap.perlinNoise( 14143, randomSeed, falsetrue1 | 2 | 0 | 0 );
  47.             
  48.             // パーティクルを生成します
  49.             for (var i:uint = 0; i < NUM_PARTICLE; i++) {
  50.                 var px:Number = Math.random() * 465;
  51.                 var py:Number = Math.random() * 465;
  52.                 particleList[i] = new Particle(px, py);
  53.             }
  54.             
  55.             // ループ処理
  56.             addEventListener( Event.ENTER_FRAME, loop );
  57.             
  58.             // 時間差でフォースマップと色変化の具合を変更しています
  59.             timer = new Timer(10000);
  60.             timer.addEventListener(TimerEvent.TIMER, resetFunc);
  61.             timer.start();
  62.             
  63.             // デバッグ用のスタッツを表示しています
  64.             addChild(new Stats);
  65.         }
  66.         
  67.         private function loop( e:Event ):void {
  68.             bmpData.lock();
  69.             bmpData.colorTransform( rect, colorTransform );
  70.             
  71.             var len:uint = particleList.length;
  72.             var col:Number
  73.             
  74.             var sx:Number = 5000 * (mouseX - lastMouseX);
  75.             var sy:Number = 5000 * (mouseY - lastMouseY);
  76.             var dx:Number, dy:Number;
  77.             var dist:Number;
  78.             
  79.             var mx:int = mouseX;
  80.             var my:int = mouseY;
  81.             
  82.             for (var i:uint = 0; i < len; i++) {
  83.                 
  84.                 var dots:Particle = particleList[i];
  85.                 
  86.                 // マウスの値を適用
  87.                 dx = dots.px - mx;
  88.                 dy = dots.py - my;
  89.                 dist = dx * dx + dy * dy + 50;
  90.                 
  91.                 // ここ上手くやれば高速化できそう
  92.                 col = forceMap.getPixel( dots.px >> 3,  dots.py >> 3);
  93.                 dots.ax += ( (col >> 16 & 0xff) - 128 ) * .0005;
  94.                 dots.ay += ( (col >> 8  & 0xff) - 128 ) * .0005;
  95.                 dots.vx += dots.ax;
  96.                 dots.vy += dots.ay;
  97.                 dots.px += dots.vx  + sx / dist;
  98.                 dots.py += dots.vy  + sy / dist;
  99.                 var _posX:Number = dots.px;
  100.                 var _posY:Number = dots.py;
  101.                     
  102.                 dots.ax *= .96;
  103.                 dots.ay *= .96;
  104.                 dots.vx *= .92;
  105.                 dots.vy *= .92;
  106.                 
  107.                 ( _posX > 465 ) ? dots.px = 0 :
  108.                 ( _posX < 0 ) ? dots.px = 465 : 0;
  109.                 ( _posY > 465 ) ? dots.py = 0 :
  110.                 ( _posY < 0 ) ? dots.py = 465 : 0;
  111.                 
  112.                 bmpData.setPixel( dots.px, dots.py, 0xffffff );
  113.             }
  114.             bmpData.unlock();
  115.             
  116.             lastMouseX = mouseX;
  117.             lastMouseY = mouseY;
  118.         }
  119.         
  120.         private function resetFunc(e:Event):void {
  121.             forceMap.perlinNoise( 14143, seed, falsetrue1|2|0|0false, offset );
  122.             offset[0].x += 1.5;
  123.             offset[1].y += 1.0;    
  124.         }
  125.     }
  126. }
  127. class Particle {
  128.     public var vx:Number = 0;
  129.     public var vy:Number = 0;
  130.     public var ax:Number = 0;
  131.     public var ay:Number = 0;
  132.     public var px:Number;
  133.     public var py:Number;
  134.     function Particle( px:Number, py:Number ) {
  135.         this.px = px;
  136.         this.py = py;
  137.     }
  138. }
noswf
  1. // forked from clockmaker's Interactive Liquid 10000
  2. // forked from clockmaker's Liquid110000 By Vector
  3. // forked from munegon's forked from: forked from: forked from: forked from: Liquid10000
  4. // forked from Saqoosha's forked from: forked from: forked from: Liquid10000
  5. // forked from nutsu's forked from: forked from: Liquid10000
  6. // forked from nutsu's forked from: Liquid10000
  7. // forked from zin0086's Liquid10000
  8. package {
  9.     /**
  10.     * マウス判定をつけてみました
  11.     * 参照: http://wonderfl.kayac.com/code/8e43498120fd4403504b7987f73d3274d12f1a42
  12.     * 2万パーティクル
  13.     */    
  14.     import flash.display.*;
  15.     import flash.geom.*;
  16.     import flash.events.*;
  17.     import flash.utils.*;
  18.     import flash.geom.*;
  19.     import net.hires.debug.Stats;
  20.     
  21.     [SWF(backgroundColor="0")];
  22.     public class Liquid extends Sprite {
  23.         private const NUM_PARTICLE:uint = 10000;
  24.         private var bmpData:BitmapData = new BitmapData( 465465false, 0x000000 );
  25.         private var forceMap:BitmapData = new BitmapData( 5757false, 0x000000 );
  26.         private var randomSeed:uint = Math.floor( Math.random() * 0xFFFF );
  27.         private var particleList:Vector.<Particle> = new Vector.<Particle>(NUM_PARTICLE, true);
  28.         private var rect:Rectangle = new Rectangle( 00465465 );
  29.         private var seed:Number = Math.floor( Math.random() * 0xFFFF );
  30.         private var offset:Array = [new Point(), new Point()];
  31.         private var colorTransform:ColorTransform = new ColorTransform( 0.9, .85, .851.0 );
  32.         private var timer:Timer;
  33.         private var lastMouseX:Number = 0;
  34.         private var lastMouseY:Number = 0;
  35.         public function Liquid() {
  36.             
  37.             stage.align = StageAlign.TOP_LEFT;
  38.             stage.scaleMode = StageScaleMode.NO_SCALE;
  39.             stage.quality = StageQuality.LOW;
  40.             stage.frameRate = 60;
  41.             
  42.             // 画面に表示用の Bitmap を作ります
  43.             addChild(new Bitmap( bmpData )) as Bitmap;
  44.             
  45.             // フォースマップの初期化をおこないます
  46.             forceMap.perlinNoise( 14143, randomSeed, falsetrue1 | 2 | 0 | 0 );
  47.             
  48.             // パーティクルを生成します
  49.             for (var i:uint = 0; i < NUM_PARTICLE; i++) {
  50.                 var px:Number = Math.random() * 465;
  51.                 var py:Number = Math.random() * 465;
  52.                 particleList[i] = new Particle(px, py);
  53.             }
  54.             
  55.             // ループ処理
  56.             addEventListener( Event.ENTER_FRAME, loop );
  57.             
  58.             // 時間差でフォースマップと色変化の具合を変更しています
  59.             timer = new Timer(10000);
  60.             timer.addEventListener(TimerEvent.TIMER, resetFunc);
  61.             timer.start();
  62.             
  63.             // デバッグ用のスタッツを表示しています
  64.             addChild(new Stats);
  65.         }
  66.         
  67.         private function loop( e:Event ):void {
  68.             bmpData.lock();
  69.             bmpData.colorTransform( rect, colorTransform );
  70.             
  71.             var len:uint = particleList.length;
  72.             var col:Number
  73.             
  74.             var sx:Number = 5000 * (mouseX - lastMouseX);
  75.             var sy:Number = 5000 * (mouseY - lastMouseY);
  76.             var dx:Number, dy:Number;
  77.             var dist:Number;
  78.             
  79.             var mx:int = mouseX;
  80.             var my:int = mouseY;
  81.             
  82.             for (var i:uint = 0; i < len; i++) {
  83.                 
  84.                 var dots:Particle = particleList[i];
  85.                 
  86.                 // マウスの値を適用
  87.                 dx = dots.px - mx;
  88.                 dy = dots.py - my;
  89.                 dist = dx * dx + dy * dy + 50;
  90.                 
  91.                 // ここ上手くやれば高速化できそう
  92.                 col = forceMap.getPixel( dots.px >> 30,  dots.py >> 3);
  93.                 dots.ax += ( (col >> 16 & 0xff) - 128 ) * .0005;
  94.                 dots.ay += ( (col >> 8  & 0xff) - 128 ) * .0005;
  95.                 dots.vx += dots.ax;
  96.                 dots.vy += dots.ay;
  97.                 dots.px += dots.vx  + sx / dist;
  98.                 dots.py += dots.vy  + sy / dist;
  99.                 var _posX:Number = dots.px;
  100.                 var _posY:Number = dots.py;
  101.                     
  102.                 dots.ax *= .96;
  103.                 dots.ay *= .96;
  104.                 dots.vx *= .92;
  105.                 dots.vy *= .92;
  106.                 
  107.                 ( _posX > 465 ) ? dots.px = 0 :
  108.                 ( _posX < 0 ) ? dots.px = 465 : 0;
  109.                 ( _posY > 465 ) ? dots.py = 0 :
  110.                 ( _posY < 0 ) ? dots.py = 465 : 0;
  111.                 
  112.                 bmpData.setPixel( dots.px, dots.py, 0xffffff );
  113.             }
  114.             bmpData.unlock();
  115.             
  116.             lastMouseX = mouseX;
  117.             lastMouseY = mouseY;
  118.         }
  119.         
  120.         private function resetFunc(e:Event):void {
  121.             forceMap.perlinNoise( 14143, seed, falsetrue1|2|0|0false, offset );
  122.             offset[0].x += 1.5;
  123.             offset[1].y += 1.0;    
  124.         }
  125.     }
  126. }
  127. class Particle {
  128.     public var vx:Number = 0;
  129.     public var vy:Number = 0;
  130.     public var ax:Number = 0;
  131.     public var ay:Number = 0;
  132.     public var px:Number;
  133.     public var py:Number;
  134.     function Particle( px:Number, py:Number ) {
  135.         this.px = px;
  136.         this.py = py;
  137.     }
  138. }
noswf
Get Adobe Flash Player