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


forked from : k__'s fluid [diff(21)]

embed

FORKED
  1. // forked from k__'s swirl (10000 particles)
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.filters.*;
  6.     import flash.geom.*;
  7.     public class Main extends Sprite {
  8.         private var mapHN:uint = 30,mapVN:uint = 30, sh:uint, sw:uint;
  9.         private var tr:Number = 0.95, tg:Number = 0.95, tb:Number = 0.95;
  10.         private var mapW:Number,mapH:Number;
  11.         private var mX:Number,mY:Number;
  12.         private var map:Array;
  13.         private var particles:Array;
  14.         private var numParticles:uint = 10000;
  15.         private var canvas:BitmapData;
  16.         public function Main() {
  17.             sw = stage.stageWidth;
  18.             sh = stage.stageHeight;
  19.             graphics.beginFill(0x111111);
  20.             graphics.drawRect(0,0,sw,sh);
  21.             graphics.endFill();
  22.             canvas = new BitmapData(sw,sh,true,0x56466f);
  23.             addChild(new Bitmap(canvas));
  24.             var i:uint,j:uint;
  25.             mapW = sw/mapVN;
  26.             mapH = sw/mapHN;
  27.             map = [];
  28.             
  29.             var m:Object;
  30.             for (j = 0; j < mapVN; j ++) {
  31.                 map.push([]);
  32.                 trace(map);
  33.                 for (i = 0; i < mapHN; i ++) {
  34.                     map[j].push(m = new Object);
  35.                     
  36.                     m.vx = Math.random() * 105;
  37.                     m.vy = Math.random() * 10 - 5;
  38.                     //初始速度
  39.                 }
  40.             }
  41.             
  42.             var p:Particle;
  43.             particles = [];
  44.             for (i = 0; i < numParticles; i ++) {
  45.                 particles.push(p = new Particle(sw, sh));
  46.             }
  47.             
  48.             addEventListener(Event.ENTER_FRAME, h_enterFrame);
  49.         }
  50.         private function h_enterFrame(evt:Event):void {
  51.             var i:uint,j:uint,k:int,l:int,cnt:uint,tvx:Number,tvy:Number;
  52.             var p:Particle,m:Object;
  53.             var temp:BitmapData = new BitmapData(sw,sh,true,0x000);
  54.             for (i = 0; i < numParticles; i ++) {
  55.                 p = particles[i];
  56.                 m = map[Math.floor(p.x / mapW)][Math.floor(p.y / mapH)];
  57.                 p.vx = (p.vx +(m.vx  - p.vx) / 10) * 0.99;
  58.                 p.vy = (p.vy + (m.vy  - p.vy) / 10) * 0.99;
  59.                 p.x += p.vx;
  60.                 p.y+= p.vy;
  61.                 if (p.x < 0 || p.y < 0 || p.x >= sw || p.y >= sw || Math.random() < 0.01) {
  62.                     p.init();
  63.                 }
  64.                 temp.setPixel32(p.x, p.y, 0xffffffff);
  65.             }
  66.             
  67.             for (j = 0; j < mapVN; j ++) {
  68.                 for (i = 0; i < mapHN; i ++) {
  69.                     cnt  = 30;
  70.                     tvx = map[i][j].vx * cnt;
  71.                     tvy = map[i][j].vy * cnt;
  72.                     for (k = -2; k <=2; k ++) {
  73.                         if (i + k < 0 || i + k >= map.length) { continue }
  74.                         for (l = -2; l <= 2; l ++) {
  75.                             if (j + l < 0 || j + l >= map[i + k].length) { continue }
  76.                                 tvx += map[i + k][j + l].vx;
  77.                                 tvy += map[i + k][j + l].vy;
  78.                                 cnt ++;
  79.                         }
  80.                     }
  81.                     map[i][j].vx = tvx / cnt;
  82.                     map[i][j].vy = tvy / cnt;
  83.                 }
  84.             }
  85.             
  86.             if (mX || mY) {
  87.                 m = map[Math.floor(mX / mapW)][Math.floor(mY / mapH)];
  88.                 m.vx = (m.vx +(mouseX - mX) * 5) * 0.99;
  89.                 m.vy = (m.vy + (mouseY - mY) * 5) * 0.99;
  90.             }
  91.             mX = Math.max(0,Math.min(mouseX, sw - 1));
  92.             mY = Math.max(0,Math.min(mouseY, sh - 1));
  93.             
  94.             var filter:BitmapFilter;
  95.             if (Math.random() < 0.05) {
  96.                 tr = Math.random() / 5 + 0.85;
  97.                 tg = Math.random() / 5 + 0.85;
  98.                 tb = Math.random() / 5 + 0.85;
  99.             }
  100.             filter = new ColorMatrixFilter([tr,0,0,0,0,    0,tg,0,0,0,    0,0,tb,0,0,    0,0,0,0.96,0]);
  101.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  102.             
  103.             filter= new BlurFilter(4,4);
  104.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  105.             
  106.                 
  107.             canvas.draw(temp, new Matrix(), new ColorTransform(1,1,1,0.5,0,0,0,0),BlendMode.ADD);
  108.         }
  109.     }
  110. }
  111. class Particle {
  112.     public var x:Number,y:Number, vx:Number, vy:Number, sw:uint, sh:uint;
  113.     function Particle(w:uint, h:uint) {
  114.         sw = w;
  115.         sh = h;
  116.         
  117.         init();
  118.     }
  119.     public function init():void {
  120.         x = Math.random() * sw;
  121.         y = Math.random() * sh;
  122.                 vx = vy = 0;
  123.         
  124.     }
  125. }
  126.     
noswf
  1. // forked from k__'s swirl (10000 particles)
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.filters.*;
  6.     import flash.geom.*;
  7.     public class Main extends Sprite {
  8.         private var mapHN:uint = 30,mapVN:uint = 30, sh:uint, sw:uint;
  9.         private var tr:Number = 0.95, tg:Number = 0.95, tb:Number = 0.95;
  10.         private var mapW:Number,mapH:Number;
  11.         private var mX:Number,mY:Number;
  12.         private var map:Array;
  13.         private var particles:Array;
  14.         private var numParticles:uint = 1000;
  15.         private var canvas:BitmapData;
  16.         public function Main() {
  17.             sw = stage.stageWidth;
  18.             sh = stage.stageHeight;
  19.             graphics.beginFill(0xffffff);
  20.             graphics.drawRect(0,0,sw,sh);
  21.             graphics.endFill();
  22.             canvas = new BitmapData(sw,sh,true,0x00ffffff);
  23.             addChild(new Bitmap(canvas));
  24.             var i:uint,j:uint;
  25.             mapW = sw / mapHN;
  26.             mapH = sw / mapVN;
  27.             map = [];
  28.             
  29.             var m:Object;
  30.             for (j = 0; j < mapVN; j ++) {
  31.                 map.push([]);
  32.                 for (i = 0; i < mapHN; i ++) {
  33.                     map[j].push(m = new Object);
  34.                     
  35.                     m.vx = Math.random() * 105;
  36.                     m.vy = Math.random() * 10 - 5;
  37.                 }
  38.             }
  39.             
  40.             var p:Particle;
  41.             particles = [];
  42.             for (i = 0; i < numParticles; i ++) {
  43.                 particles.push(p = new Particle(sw, sh));
  44.             }
  45.             
  46.             addEventListener(Event.ENTER_FRAME, h_enterFrame);
  47.         }
  48.         private function h_enterFrame(evt:Event):void {
  49.             var i:uint,j:uint,k:int,l:int,cnt:uint,tvx:Number,tvy:Number;
  50.             var dx:Number, dy:Number, dis:Number;
  51.             var p:Particle, p1:Particle, m:Object;
  52.             var temp:BitmapData = new BitmapData(sw,sh,true,0x00000000);
  53.             for (i = 0; i < numParticles; i ++) {
  54.                 p = particles[i];
  55.                 m = map[Math.floor(p.x / mapW)][Math.floor(p.y / mapH)];
  56.                 p.vx = (p.vx + (m.vx  - p.vx) / 10) * 0.99;
  57.                 p.vy = (p.vy + (m.vy  - p.vy) / 10) * 0.99;
  58.                 p.x += p.vx;
  59.                 p.y += p.vy;
  60.                 p.trim();
  61.                 temp.setPixel32(p.x, p.y, 0xffffffff);
  62.             }
  63.             
  64.             // Let's try out some collision resolving, will we?
  65.             for (i = 0; i < numParticles; i ++) {
  66.                 for (j = i+1; j < numParticles; j ++) {
  67.                     p = particles[i];
  68.                     p1 = particles[j];
  69.                     
  70.                     dx = p.x - p1.x;
  71.                     dy = p.y - p1.y;
  72.                     dis = Math.sqrt(dx * dx + dy * dy);
  73.                     if(dis < 5){
  74.                         dx /= dis;
  75.                         dy /= dis;
  76.                         
  77.                         var diff:Number = 5 - dis;
  78.                         
  79.                         p.x += dx * diff;
  80.                         p.y += dy * diff;
  81.                         p1.x -= dx * diff;
  82.                         p1.y -= dy * diff;
  83.                     }
  84.                 }
  85.             }
  86.             
  87.             for (j = 0; j < mapVN; j ++) {
  88.                 for (i = 0; i < mapHN; i ++) {
  89.                     cnt  = 30;
  90.                     tvx = map[i][j].vx * cnt;
  91.                     tvy = map[i][j].vy * cnt;
  92.                     for (k = -2; k <=2; k ++) {
  93.                         if (i + k < 0 || i + k >= map.length) { continue }
  94.                         for (l = -2; l <= 2; l ++) {
  95.                             if (j + l < 0 || j + l >= map[i + k].length) { continue }
  96.                                 tvx += map[i + k][j + l].vx;
  97.                                 tvy += map[i + k][j + l].vy;
  98.                                 cnt ++;
  99.                         }
  100.                     }
  101.                     map[i][j].vx = tvx / cnt;
  102.                     map[i][j].vy = tvy / cnt;
  103.                 }
  104.             }
  105.             
  106.             if (mX || mY) {
  107.                 m = map[Math.floor(mX / mapW)][Math.floor(mY / mapH)];
  108.                 m.vx = (m.vx +(mouseX - mX) * 5) * 0.99;
  109.                 m.vy = (m.vy + (mouseY - mY) * 5) * 0.99;
  110.             }
  111.             mX = Math.max(0,Math.min(mouseX, sw - 1));
  112.             mY = Math.max(0,Math.min(mouseY, sh - 1));
  113.             
  114.             var filter:BitmapFilter;
  115.             /*if (Math.random() < 0.05) {
  116.                 tr = Math.random() / 5 + 0.85;
  117.                 tg = Math.random() / 5 + 0.85;
  118.                 tb = Math.random() / 5 + 0.85;
  119.             }*/
  120.             tr = tb = tg = 0;
  121.             filter = new ColorMatrixFilter([tr,0,0,0,0,    0,tg,0,0,0,    0,0,tb,0,0,    0,0,0,0.96,0]);
  122.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  123.             
  124.             filter= new BlurFilter(4,4);
  125.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  126.             
  127.                 
  128.             canvas.draw(temp, new Matrix(), new ColorTransform(1,1,1,0.5,0,0,0,0),BlendMode.ADD);
  129.         }
  130.     }
  131. }
  132. class Particle {
  133.     public var x:Number,y:Number, vx:Number, vy:Number, sw:uint, sh:uint;
  134.     function Particle(w:uint, h:uint) {
  135.         sw = w;
  136.         sh = h;
  137.         
  138.         init();
  139.     }
  140.     public function init() : void {
  141.         x = Math.random() * sw;
  142.         y = Math.random() * sh;
  143.                 vx = vy = 0;
  144.         
  145.     }
  146.     
  147.     // Trim particle into the visible area
  148.     public function trim() : void {
  149.         vx = (x < 0 ? -vx : vx);
  150.         x = (x < 0 ? +1 : x);
  151.         vy = (y < 0 ? -vy : vy);
  152.         y = (y < 0 ? 1 : y);
  153.         
  154.         vx = (x > sw ? -vx : vx);
  155.         x = (x > sw ? sw-1 : x);
  156.         vy = (y > sh ? -vy : vy);
  157.         y = (y > sh ? sh-1 : y);
  158.     }
  159. }
  160.     
noswf
  1. // forked from k__'s swirl (10000 particles)
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.filters.*;
  6.     import flash.geom.*;
  7.     public class Main extends Sprite {
  8.         private var mapHN:uint = 30,mapVN:uint = 30, sh:uint, sw:uint;
  9.         private var tr:Number = 0.95, tg:Number = 0.95, tb:Number = 0.95;
  10.         private var mapW:Number,mapH:Number;
  11.         private var mX:Number,mY:Number;
  12.         private var map:Array;
  13.         private var particles:Array;
  14.         private var numParticles:uint = 30000;
  15.         private var canvas:BitmapData;
  16.         public function Main() {
  17.             sw = stage.stageWidth;
  18.             sh = stage.stageHeight;
  19.             graphics.beginFill(0x161616);
  20.             graphics.drawRect(0,0,sw,sh);
  21.             graphics.endFill();
  22.             canvas = new BitmapData(sw,sh,true,0x00ffffff);
  23.             addChild(new Bitmap(canvas));
  24.             var i:uint,j:uint;
  25.             mapW = sw / mapHN;
  26.             mapH = sw / mapVN;
  27.             map = [];
  28.             
  29.             var m:Object;
  30.             for (j = 0; j < mapVN; j ++) {
  31.                 map.push([]);
  32.                 for (i = 0; i < mapHN; i ++) {
  33.                     map[j].push(m = new Object);
  34.                     
  35.                     m.vx = Math.random() * 105;
  36.                     m.vy = Math.random() * 10 - 5;
  37.                 }
  38.             }
  39.             
  40.             var p:Particle;
  41.             particles = [];
  42.             for (i = 0; i < numParticles; i ++) {
  43.                 particles.push(p = new Particle(sw, sh));
  44.             }
  45.             
  46.             addEventListener(Event.ENTER_FRAME, h_enterFrame);
  47.         }
  48.         private function h_enterFrame(evt:Event):void {
  49.             var i:uint,j:uint,k:int,l:int,cnt:uint,tvx:Number,tvy:Number;
  50.             var p:Particle,m:Object;
  51.             var temp:BitmapData = new BitmapData(sw,sh,true,0x00000000);
  52.             for (i = 0; i < numParticles; i ++) {
  53.                 p = particles[i];
  54.                 m = map[Math.floor(p.x / mapW)][Math.floor(p.y / mapH)];
  55.                 p.vx = (p.vx +(m.vx  - p.vx) / 10) * 0.99;
  56.                 p.vy = (p.vy + (m.vy  - p.vy) / 10) * 0.99;
  57.                 p.x += p.vx;
  58.                 p.y+= p.vy;
  59.                 if (p.x < 0 || p.y < 0 || p.x >= sw || p.y >= sw || Math.random() < 0.01) {
  60.                     p.init();
  61.                 }
  62.                 temp.setPixel32(p.x, p.y, 0xffffffff);
  63.             }
  64.             
  65.             for (j = 0; j < mapVN; j ++) {
  66.                 for (i = 0; i < mapHN; i ++) {
  67.                     cnt  = 30;
  68.                     tvx = map[i][j].vx * cnt;
  69.                     tvy = map[i][j].vy * cnt;
  70.                     for (k = -2; k <=2; k ++) {
  71.                         if (i + k < 0 || i + k >= map.length) { continue }
  72.                         for (l = -2; l <= 2; l ++) {
  73.                             if (j + l < 0 || j + l >= map[i + k].length) { continue }
  74.                                 tvx += map[i + k][j + l].vx;
  75.                                 tvy += map[i + k][j + l].vy;
  76.                                 cnt ++;
  77.                         }
  78.                     }
  79.                     map[i][j].vx = tvx / cnt;
  80.                     map[i][j].vy = tvy / cnt;
  81.                 }
  82.             }
  83.             
  84.             if (mX || mY) {
  85.                 m = map[Math.floor(mX / mapW)][Math.floor(mY / mapH)];
  86.                 m.vx = (m.vx +(mouseX - mX) * 5) * 0.99;
  87.                 m.vy = (m.vy + (mouseY - mY) * 5) * 0.99;
  88.             }
  89.             mX = Math.max(0,Math.min(mouseX, sw - 1));
  90.             mY = Math.max(0,Math.min(mouseY, sh - 1));
  91.             
  92.             var filter:BitmapFilter;
  93.             if (Math.random() < 0.05) {
  94.                 tr = Math.random() / 5 + 0.85;
  95.                 tg = Math.random() / 5 + 0.85;
  96.                 tb = Math.random() / 5 + 0.85;
  97.             }
  98.             filter = new ColorMatrixFilter([tr,0,0,0,0,    0,tg,0,0,0,    0,0,tb,0,0,    0,0,0,0.96,0]);
  99.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  100.             
  101.             filter= new BlurFilter(4,4);
  102.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  103.             
  104.                 
  105.             canvas.draw(temp, new Matrix(), new ColorTransform(1,1,1,0.5,0,0,0,0),BlendMode.ADD);
  106.         }
  107.     }
  108. }
  109. class Particle {
  110.     public var x:Number,y:Number, vx:Number, vy:Number, sw:uint, sh:uint;
  111.     function Particle(w:uint, h:uint) {
  112.         sw = w;
  113.         sh = h;
  114.         
  115.         init();
  116.     }
  117.     public function init():void {
  118.         x = Math.random() * sw;
  119.         y = Math.random() * sh;
  120.                 vx = vy = 0;
  121.         
  122.     }
  123. }
  124.     
noswf
  1. // forked from k__'s swirl (10000 particles)
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.filters.*;
  6.     import flash.geom.*;
  7.     public class Main extends Sprite {
  8.         private var mapHN:uint = 30,mapVN:uint = 30, sh:uint, sw:uint;
  9.         private var tr:Number = 0.95, tg:Number = 0.95, tb:Number = 0.95;
  10.         private var mapW:Number,mapH:Number;
  11.         private var mX:Number,mY:Number;
  12.         private var map:Array;
  13.         private var particles:Array;
  14.         private var numParticles:uint = 10000;
  15.         private var canvas:BitmapData;
  16.         public function Main() {
  17.             sw = stage.stageWidth;
  18.             sh = stage.stageHeight;
  19.             graphics.beginFill(0xffffff);
  20.             graphics.drawRect(0,0,sw,sh);
  21.             graphics.endFill();
  22.             canvas = new BitmapData(sw,sh,true,0x00ffffff);
  23.             addChild(new Bitmap(canvas));
  24.             var i:uint,j:uint;
  25.             mapW = sw / mapHN;
  26.             mapH = sw / mapVN;
  27.             map = [];
  28.             
  29.             var m:Object;
  30.             for (j = 0; j < mapVN; j ++) {
  31.                 map.push([]);
  32.                 for (i = 0; i < mapHN; i ++) {
  33.                     map[j].push(m = new Object);
  34.                     
  35.                     m.vx = Math.random() * 105;
  36.                     m.vy = Math.random() * 10 - 5;
  37.                 }
  38.             }
  39.             
  40.             var p:Particle;
  41.             particles = [];
  42.             for (i = 0; i < numParticles; i ++) {
  43.                 particles.push(p = new Particle(sw, sh));
  44.             }
  45.             
  46.             addEventListener(Event.ENTER_FRAME, h_enterFrame);
  47.         }
  48.         private function h_enterFrame(evt:Event):void {
  49.             var i:uint,j:uint,k:int,l:int,cnt:uint,tvx:Number,tvy:Number;
  50.             var p:Particle,m:Object;
  51.             var temp:BitmapData = new BitmapData(sw,sh,true,0x00000000);
  52.             for (i = 0; i < numParticles; i ++) {
  53.                 p = particles[i];
  54.                 m = map[Math.floor(p.x / mapW)][Math.floor(p.y / mapH)];
  55.                 p.vx = (p.vx +(m.vx  - p.vx) / 10) * 0.99;
  56.                 p.vy = (p.vy + (m.vy  - p.vy) / 10) * 0.99;
  57.                 p.x += p.vx;
  58.                 p.y+= p.vy;
  59.                 if (p.x < 0 || p.y < 0 || p.x >= sw || p.y >= sw || Math.random() < 0.01) {
  60.                     p.init();
  61.                 }
  62.                 temp.setPixel32(p.x, p.y, 0xffffffff);
  63.             }
  64.             
  65.             for (j = 0; j < mapVN; j ++) {
  66.                 for (i = 0; i < mapHN; i ++) {
  67.                     cnt  = 30;
  68.                     tvx = map[i][j].vx * cnt;
  69.                     tvy = map[i][j].vy * cnt;
  70.                     for (k = -2; k <=2; k ++) {
  71.                         if (i + k < 0 || i + k >= map.length) { continue }
  72.                         for (l = -2; l <= 2; l ++) {
  73.                             if (j + l < 0 || j + l >= map[i + k].length) { continue }
  74.                                 tvx += map[i + k][j + l].vx;
  75.                                 tvy += map[i + k][j + l].vy;
  76.                                 cnt ++;
  77.                         }
  78.                     }
  79.                     map[i][j].vx = tvx / cnt;
  80.                     map[i][j].vy = tvy / cnt;
  81.                 }
  82.             }
  83.             
  84.             if (mX || mY) {
  85.                 m = map[Math.floor(mX / mapW)][Math.floor(mY / mapH)];
  86.                 m.vx = (m.vx +(mouseX - mX) * 5) * 0.99;
  87.                 m.vy = (m.vy + (mouseY - mY) * 5) * 0.99;
  88.             }
  89.             mX = Math.max(0,Math.min(mouseX, sw - 1));
  90.             mY = Math.max(0,Math.min(mouseY, sh - 1));
  91.             
  92.             var filter:BitmapFilter;
  93.             if (Math.random() < 0.05) {
  94.                 tr = Math.random() / 5 + 0.85;
  95.                 tg = Math.random() / 5 + 0.85;
  96.                 tb = Math.random() / 5 + 0.85;
  97.             }
  98.             filter = new ColorMatrixFilter([tr*0.5,0,0,0,0,    0,tg*0.1,0,0,0,    0,0,tb,0,0,    0,0,0,0.96,0]);
  99.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  100.             
  101.             filter= new BlurFilter(2,2);
  102.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  103.             
  104.                 
  105.             canvas.draw(temp, new Matrix(), new ColorTransform(1,1,1,0.5,0,0,0,0),BlendMode.ADD);
  106.         }
  107.     }
  108. }
  109. class Particle {
  110.     public var x:Number,y:Number, vx:Number, vy:Number, sw:uint, sh:uint;
  111.     function Particle(w:uint, h:uint) {
  112.         sw = w;
  113.         sh = h;
  114.         
  115.         init();
  116.     }
  117.     public function init():void {
  118.         x = Math.random() * sw;
  119.         y = Math.random() * sh;
  120.                 vx = vy = 0;
  121.         
  122.     }
  123. }
  124.     
noswf
  1. // forked from k__'s swirl (10000 particles)
  2. package {
  3.     import flash.display.*;
  4.     import flash.events.*;
  5.     import flash.filters.*;
  6.     import flash.geom.*;
  7.     public class Main extends Sprite {
  8.         private var mapHN:uint = 30,mapVN:uint = 30, sh:uint, sw:uint;
  9.         private var tr:Number = 0.95, tg:Number = 0.95, tb:Number = 0.95;
  10.         private var mapW:Number,mapH:Number;
  11.         private var mX:Number,mY:Number;
  12.         private var map:Array;
  13.         private var particles:Array;
  14.         private var numParticles:uint = 10000;
  15.         private var canvas:BitmapData;
  16.         public function Main() {
  17.             sw = stage.stageWidth;
  18.             sh = stage.stageHeight;
  19.             graphics.beginFill(0xffffff);
  20.             graphics.drawRect(0,0,sw,sh);
  21.             graphics.endFill();
  22.             canvas = new BitmapData(sw,sh,true,0x00ffffff);
  23.             addChild(new Bitmap(canvas));
  24.             var i:uint,j:uint;
  25.             mapW = sw / mapHN;
  26.             mapH = sw / mapVN;
  27.             map = [];
  28.             
  29.             var m:Object;
  30.             for (j = 0; j < mapVN; j ++) {
  31.                 map.push([]);
  32.                 for (i = 0; i < mapHN; i ++) {
  33.                     map[j].push(m = new Object);
  34.                     
  35.                     m.vx = Math.random() * 105;
  36.                     m.vy = Math.random() * 10 - 5;
  37.                 }
  38.             }
  39.             
  40.             var p:Particle;
  41.             particles = [];
  42.             for (i = 0; i < numParticles; i ++) {
  43.                 particles.push(p = new Particle(sw, sh));
  44.             }
  45.             
  46.             addEventListener(Event.ENTER_FRAME, h_enterFrame);
  47.         }
  48.         private function h_enterFrame(evt:Event):void {
  49.             var i:uint,j:uint,k:int,l:int,cnt:uint,tvx:Number,tvy:Number;
  50.             var p:Particle,m:Object;
  51.             var temp:BitmapData = new BitmapData(sw,sh,true,0x00000000);
  52.             for (i = 0; i < numParticles; i ++) {
  53.                 p = particles[i];
  54.                 m = map[Math.floor(p.x / mapW)][Math.floor(p.y / mapH)];
  55.                 p.vx = (p.vx +(m.vx  - p.vx) / 10) * 0.99;
  56.                 p.vy = (p.vy + (m.vy  - p.vy) / 10) * 0.99;
  57.                 p.x += p.vx;
  58.                 p.y+= p.vy;
  59.                 if (p.x < 0 || p.y < 0 || p.x >= sw || p.y >= sw || Math.random() < 0.01) {
  60.                     p.init();
  61.                 }
  62.                 temp.setPixel32(p.x, p.y, 0xffffffff);
  63.             }
  64.             
  65.             for (j = 0; j < mapVN; j ++) {
  66.                 for (i = 0; i < mapHN; i ++) {
  67.                     cnt  = 30;
  68.                     tvx = map[i][j].vx * cnt;
  69.                     tvy = map[i][j].vy * cnt;
  70.                     for (k = -2; k <=2; k ++) {
  71.                         if (i + k < 0 || i + k >= map.length) { continue }
  72.                         for (l = -2; l <= 2; l ++) {
  73.                             if (j + l < 0 || j + l >= map[i + k].length) { continue }
  74.                                 tvx += map[i + k][j + l].vx;
  75.                                 tvy += map[i + k][j + l].vy;
  76.                                 cnt ++;
  77.                         }
  78.                     }
  79.                     map[i][j].vx = tvx / cnt;
  80.                     map[i][j].vy = tvy / cnt;
  81.                 }
  82.             }
  83.             
  84.             if (mX || mY) {
  85.                 m = map[Math.floor(mX / mapW)][Math.floor(mY / mapH)];
  86.                 m.vx = (m.vx +(mouseX - mX) * 5) * 0.99;
  87.                 m.vy = (m.vy + (mouseY - mY) * 5) * 0.99;
  88.             }
  89.             mX = Math.max(0,Math.min(mouseX, sw - 1));
  90.             mY = Math.max(0,Math.min(mouseY, sh - 1));
  91.             
  92.             var filter:BitmapFilter;
  93.             if (Math.random() < 0.05) {
  94.                 tr = Math.random() / 5 + 0.85;
  95.                 tg = Math.random() / 5 + 0.85;
  96.                 tb = Math.random() / 5 + 0.85;
  97.             }
  98.             filter = new ColorMatrixFilter([tr,0,0,0,0,    0,tg,0,0,0,    0,0,tb,0,0,    0,0,0,0.96,0]);
  99.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  100.             
  101.             filter= new BlurFilter(4,4);
  102.             canvas.applyFilter(canvas,new Rectangle(0,0,sw,sh),new Point(),filter);
  103.             
  104.                 
  105.             canvas.draw(temp, new Matrix(), new ColorTransform(1,1,1,0.5,0,0,0,0),BlendMode.ADD);
  106.         }
  107.     }
  108. }
  109. class Particle {
  110.     public var x:Number,y:Number, vx:Number, vy:Number, sw:uint, sh:uint;
  111.     function Particle(w:uint, h:uint) {
  112.         sw = w;
  113.         sh = h;
  114.         
  115.         init();
  116.     }
  117.     public function init():void {
  118.         x = Math.random() * sw;
  119.         y = Math.random() * sh;
  120.                 vx = vy = 0;
  121.         
  122.     }
  123. }
  124.     
noswf
Get Adobe Flash Player