forked from: Colorful Spring Particle
/**
* Copyright Patrick.Baleydier ( http://wonderfl.net/user/Patrick.Baleydier )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/oUl7
*/
package {
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.BlendMode;
import flash.display.GradientType;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
[SWF(width="500", height="500", backgroundColor="0x000000")]
public class Nuee extends Sprite {
private var array:Array = [];
private const N:int = 50, minDist:int = 75, springAmount:Number = 0.00075;
private var canvas:Bitmap, bmpData:BitmapData, sp:Sprite, line:Sprite;
private var tr:ColorTransform = new ColorTransform(1,1,1,0.85);
private var flg:Boolean = true;
private var colStack:Array = [0x587b7C, 0x719b9E, 0x9FC1BE, 0xE0D9BB, 0xDACB94, 0xCABA88, 0xDABD55, 0xC49F32, 0xA97409];
private var blurValue : int =6;
public function Nuee() {
graphics.beginFill(0);
graphics.drawRect(0,0,stage.stageWidth,stage.stageHeight);
graphics.endFill();
sp = new Sprite();
line = new Sprite();
sp.addChild(line);
for(var i:int = 0; i < N; i++){
var ball:Ball = new Ball(Math.random() * 4 - 2, Math.random() * 4 - 2,5,colStack[i%colStack.length]);
array.push(ball);
ball.x = stage.stageWidth*Math.random();
ball.y = stage.stageHeight*Math.random();
sp.addChild(ball);
}
bmpData = new BitmapData(stage.stageWidth, stage.stageHeight, true, 0x004C6375);
canvas = new Bitmap(bmpData);
addChild(canvas);
sp.visible = false;
addEventListener(Event.ENTER_FRAME, onEnterFrame);
stage.addEventListener(MouseEvent.CLICK, clickHandler);
stage.addEventListener(MouseEvent.MOUSE_WHEEL, wheelHandler);
}
private function wheelHandler(event : MouseEvent) : void {
blurValue += event.delta;
}
private function clickHandler(event : MouseEvent) : void {
flg = !flg;
}
private function onEnterFrame(e:Event):void {
bmpData.colorTransform(bmpData.rect, tr);
bmpData.draw(sp);
var len:uint = N;
while(len--) {
var ball:Ball = array[len];
ball.x += ball.vx;
ball.y += ball.vy;
ball.alpha += (ball.toAlpha-ball.alpha)/4;
ball.toAlpha = .5;
if(ball.x < -20) ball.x = stage.stageWidth+20;
else if(ball.x > stage.stageWidth+20) ball.x = -20;
if(ball.y < -20) ball.y = stage.stageHeight+20;
else if(ball.y > stage.stageHeight+20) ball.y = -20;
}
sp.graphics.clear();
for(var i:int = 0; i < N - 1; i++){
var partA:Ball = array[i];
for(var j:uint = i + 1; j < N; j++){
var partB:Ball = array[j];
detect(partA, partB);
}
}
}
private function detect(b1:Ball, b2:Ball):void{
var dx:Number = b2.x - b1.x;
var dy:Number = b2.y - b1.y;
var dist:Number = Math.sqrt(dx * dx + dy * dy);
if(dist < minDist){
//
sp.graphics.lineStyle(1);
var m:Matrix = new Matrix;
m.createGradientBox(Math.abs(dx), Math.abs(dy), Math.atan2(dy,dx), Math.min(b1.x, b2.x), Math.min(b1.y, b2.y));
sp.graphics.lineGradientStyle(GradientType.LINEAR, [b1.color, b2.color], [b1.alpha, b2.alpha],[0,255], m);
sp.graphics.moveTo(b1.x, b1.y);
sp.graphics.lineTo(b2.x, b2.y);
if (flg==true)sp.filters = [new BlurFilter(blurValue,blurValue,1)];
else sp.filters =[];
sp.blendMode = BlendMode.HARDLIGHT;
b1.toAlpha += 0.1;
b2.toAlpha += 0.1;
var ax:Number = dx * springAmount;
var ay:Number = dy * springAmount;
b1.vx += ax / b1.r;
b1.vy += ay / b1.r;
b2.vx -= ax / b2.r;
b2.vy -= ay / b2.r;
}
}
}
}
import flash.display.*;
class Ball extends Sprite {
public var vx:Number, vy:Number, r:Number, toAlpha:Number, color:uint;
public function Ball(vx:Number, vy:Number, r:Number, color:uint) {
this.vx = vx; this.vy = vy; this.r = r; this.color = color;
toAlpha = .5;
graphics.beginFill(color);
graphics.drawCircle(0, 0, r);
blendMode = BlendMode.ADD;
}
}