Forked from: vasari's forked from: forked from: Colorful Spring Particle.. diff:2 forked from: forked from: forked from: Colorful Spring Particle vasari forked:0favorite:0lines:87license : MIT License modified : 2010-06-07 03:32:22 Embed Tweet // forked from vasari's forked from: forked from: Colorful Spring Particle // forked from vasari's forked from: Colorful Spring Particle // forked from matsu4512's Colorful Spring Particle package { import flash.display.*; import flash.events.*; import flash.geom.ColorTransform; import flash.geom.Matrix; public class ColorfulSpring extends Sprite { private var array:Array = []; private const N:int = 500, minDist:int = 900, springAmount:Number = 0.75; private var canvas:Bitmap, bmpData:BitmapData, sp:Sprite; private var tr:ColorTransform = new ColorTransform(1,1,1,0.5); public function ColorfulSpring() { graphics.beginFill(0); graphics.drawRect(0,0,465,465); graphics.endFill(); sp = new Sprite(); for(var i:int = 0; i < 50; i++){ var ball:Ball = new Ball(Math.random() * 10 - 5, Math.random() * 10 - 5, Math.random()*20+10, Math.random() * 0xFFFFFF); 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, 0xFF000000); canvas = new Bitmap(bmpData); addChild(canvas); addEventListener(Event.ENTER_FRAME, onEnterFrame); } 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 = 0; 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]; spring(partA, partB); } } } private function spring(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); 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.*; import flash.filters.*; 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 = 0; graphics.lineStyle(2,0xFFFFFF); graphics.drawCircle(0, 0, r); filters = [new GlowFilter(color, 1, 16, 16, 6), new BlurFilter(2,2)]; blendMode = BlendMode.ADD; } } Code Fullscreen Preview Fullscreen stageWidth stageHeight blendMode Math.min Math.abs colorTransform filters alpha BlendMode.ADD color clear GlowFilter Matrix Math.atan2 drawCircle Bitmap createGradientBox drawRect lineGradientStyle addEventListener sort new page view favorite forked pv179 forked from: forked from: fork.. vasari forked:0 favorite:0lines:87 (diff:1)