flash on 2011-1-7
♥0 |
Line 92 |
Modified 2011-01-07 17:50:56 |
MIT License
archived:2017-03-30 05:06:47
ActionScript3 source code
/**
* Copyright yama3 ( http://wonderfl.net/user/yama3 )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/wW6w
*/
package {
import flash.display.Sprite;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
[SWF(width="465", height="465", backgroundColor="0x000613", frameRate="24")]
public class FlashTest extends Sprite {
private static const W:Number = 465;
private static const H:Number = 465;
private static const FREQUENCY_RANGE:int = 14;
private static const GLOW_RANGE:int = 3;
private var _particles:Vector.<Particle> = new Vector.<Particle>();
private var _canvas:BitmapData;
private var _glow:BitmapData;
private var _ct:ColorTransform;
private var _startX:Number;
private var _startY:Number;
public function FlashTest() {
graphics.beginFill(0x000613);
graphics.drawRect(0, 0, W, H);
setUp();
}
private function setUp():void {
_ct = new ColorTransform(0.9, 0.9, 0.9, 0.98);
_canvas = new BitmapData(W, H, false, 0);
var canvas:Bitmap = new Bitmap(_canvas, "auto", true);
canvas.blendMode = "screen";
_glow = new BitmapData(W/GLOW_RANGE, H/GLOW_RANGE, false, 0);
var bm:Bitmap = new Bitmap(_glow, "never", true);
bm.scaleX = bm.scaleY = GLOW_RANGE;
bm.blendMode = "add";
addChild(canvas);
addChild(bm);
addEventListener(Event.ENTER_FRAME, update);
}
private function createParticle():void {
var p:Particle = new Particle();
var radius:Number = Math.sqrt(Math.random()*10);
var angle:Number = Math.random() * (Math.PI)*2;
p.x = _startX;
p.y = _startY;
p.vx = Math.cos(angle) * radius;
p.vy = Math.sin(angle) * radius;
_particles.push(p);
}
private function colorChange():void {
(_ct.redMultiplier > 0.99) ? _ct.redMultiplier = 0.9 : _ct.redMultiplier += 0.003;
(_ct.greenMultiplier > 0.99) ? _ct.greenMultiplier = 0.9 : _ct.greenMultiplier += 0.006;
(_ct.blueMultiplier > 0.99) ? _ct.blueMultiplier = 0.9 : _ct.blueOffset += 0.009;
}
private function spark():void {
var n:int = Math.random() * 100 + 150;
_startX = Math.random() * (W * 0.6) + (W * 0.2);
_startY = Math.random() * H / 4 + 100;
while(n--) createParticle();
}
private function update(e:Event):void {
_canvas.lock();
_canvas.applyFilter(_canvas, _canvas.rect, new Point(), new BlurFilter(2, 4));
_canvas.colorTransform(_canvas.rect, _ct);
var n:int = _particles.length;
while(n--) {
var v:Number = Math.random() * 0.14 + 0.85;
var p:Particle = _particles[n];
p.vy += 0.2;
p.vx *= v;
p.vy *= v;
p.x += p.vx;
p.y += p.vy;
_canvas.setPixel(p.x, p.y, p.c);
if((p.x > stage.stageWidth || p.x < 0) || (p.y < 0 || p.y > stage.stageHeight) || Math.abs(p.vx) < .01 || Math.abs(p.vy) < .01) {
_particles.splice(n, 1);
}
}
_canvas.unlock();
_glow.draw(_canvas, new Matrix(1/GLOW_RANGE, 0, 0, 1 / GLOW_RANGE));
colorChange();
var frequency:Boolean = Boolean(int(Math.random() * FREQUENCY_RANGE));
if(frequency == false) spark();
}
}
}
import flash.geom.Point;
class Particle extends Point {
public var vx:Number = 0;
public var vy:Number = 0;
public var c:uint = 0xFFFFFF;
}