package {
import flash.text.engine.DigitCase;
import flash.display.Bitmap;
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.filters.BlurFilter;
import flash.geom.ColorTransform;
import flash.geom.Matrix;
import flash.geom.Point;
import flash.geom.Rectangle;
/**
* @author Ramiro Espada
* @author http://www.molamil.com
*/
public class AnimatedBackground extends Sprite {
public var speedX:Number;
public var speedY:Number;
public var linesSpeed:Number;
public var contentWidth:Number;
public var contentHeight:Number;
private var bmp:Bitmap;
private var bmd:BitmapData;
private var filter:BlurFilter;
private var container:Sprite;
private var bg:Sprite;
private var l:Light;
private var rectangle:Rectangle;
private var matrix:Matrix;
private var color:ColorTransform;
private var i:int;
private var line:Line;
private var lines:Array;
private var linesContainer:Sprite;
public function AnimatedBackground(){
init();
}
public function init():void {
speedX = 60;
speedY = 30;
linesSpeed = 7;
contentWidth = stage.stageWidth;
contentHeight = stage.stageHeight;
i = 0;
filter = new BlurFilter(12, 12, 1);
container = new Sprite();
container.visible = false;
bg = new Sprite();
addChild(bg);
bg.graphics.beginFill(0xE2007E);
bg.graphics.drawRect(0, 0, contentWidth, contentHeight);
bmd = new BitmapData(contentWidth, contentHeight, true, 0xE2007E);
bmp = new Bitmap(bmd);
addChild(bmp);
rectangle = new Rectangle(0, 0, contentWidth, contentHeight);
matrix = new Matrix();
color = new ColorTransform();
linesContainer = new Sprite();
var total:int = Math.floor(contentWidth/40);
var lineWidth:Number = contentWidth/(total);
lines = new Array();
for (var n:int = 0; n<total+1; n++){
line = new Line();
line.speed = linesSpeed;
line.lineWidth = lineWidth;
line.xInit = (n + 1) * lineWidth;
line.contentWidth = contentWidth;
line.contentHeight = contentHeight;
lines.push(line);
linesContainer.addChild(line);
line.init();
}
linesContainer.alpha = .02;
linesContainer.x = -lineWidth/2;
addEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
public function draw() : void {
if(i == 3){
i = 0;
newLight();
}
bmd.draw(linesContainer, matrix, color, null, rectangle);
bmd.draw(container, matrix, color, null, rectangle);
bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), filter);
bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), filter);
bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), filter);
bmd.applyFilter(bmd, bmd.rect, new Point(0, 0), filter);
for each (line in lines){
line.draw();
}
i++;
}
public function destroy():void {
}
private function newLight():void {
l = new Light();
l.contentWidth = contentWidth;
l.contentHeight = contentHeight;
l.speedX = speedX;
l.speedY = speedY;
l.init();
container.addChild(l);
}
private function enterFrameHandler(event : Event) : void {
draw();
}
}
}
import flash.display.Sprite;
import flash.events.Event;
class Line extends Sprite {
public var contentWidth:Number;
public var contentHeight:Number;
public var speed:Number;
public var xInit:Number = 0;
public var lineWidth:Number;
private var X:Number;
private var xTo:Number;
private var angle:Number;
public function init():void {
X = xInit;
xTo = contentWidth;
angle = X*2;
}
public function draw():void {
graphics.clear();
graphics.lineStyle(1, 0x56DEF9,.6);
graphics.moveTo(X+angle, -10);
graphics.lineTo(X, contentHeight+10);
if (X >= contentWidth+lineWidth){
X = 0;
angle = 0;
}
X += speed;
angle += speed;
}
public function destroy():void {
}
}
class Light extends Sprite {
public static const colors:Array = [0x54C6DC, 0xE2007E];
public var contentWidth:Number;
public var contentHeight:Number;
public var speedX:Number;
public var speedY:Number;
private var h:Number;
private var container:Sprite;
private var targetX:Number;
public function init():void {
speedX = 60;
speedY = 30;
container = new Sprite();
addChild(container);
container.graphics.clear();
container.graphics.beginFill(colors[Math.round(Math.random()*(colors.length-1))], 1);
container.graphics.drawCircle(0, 0, 10);
container.alpha = .04;
container.height = h = contentWidth/2;
container.width = contentWidth/2 + Math.random()*(contentWidth/2);
targetX = -contentWidth/2 + Math.random()*(contentWidth*2);
x = Math.random()*contentWidth;
y = contentHeight+h+Math.random()*contentHeight/2;
addEventListener(Event.ENTER_FRAME, enterFrameHandler, false, 0, true);
}
public function draw():void {
y -= speedY;
x += (x-targetX)/speedX;
if(y < -(h))
destroy();
}
public function destroy():void {
parent.removeChild(this);
removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
}
private function enterFrameHandler(event : Event) : void {
draw();
}
}