/**
* Copyright bradsedito ( http://wonderfl.net/user/bradsedito )
* MIT License ( http://www.opensource.org/licenses/mit-license.php )
* Downloaded from: http://wonderfl.net/c/124F
*/
package
{
import flash.display.*
import flash.events.*
import flash.geom.*
import flash.ui.*
import flash.text.*
import flash.filters.GradientGlowFilter
import flash.filters.BlurFilter
import flash.filters.DisplacementMapFilter
import flash.filters.DisplacementMapFilterMode
import net.hires.debug.Stats
[SWF(width=420, height=200, backgroundColor=0x0)]
public class BurningLetters extends Sprite
{
private static const FLICKER_RATE:Number = 10;
public var stats:Stats = new Stats();
private var perlinNoise:BitmapData;
private var perlinOffset:Array;
private var perlinSeed:int;
private var flame:BitmapData;
private var blackField:TextField;
private var fieldGlow:GradientGlowFilter = new GradientGlowFilter( 0,90, [0xff0000,0xffff00], [1,1], [70, 255], 25,15 );
public function BurningLetters()
{
stage.width = 420;
stage.frameRate = 60;
stage.addChild( stats );
// ENTRY POINT:
makeFlame();
makeFields();
makeNoise();
addEventListener(Event.ENTER_FRAME, onSpriteEnterFrame);
}
private function makeFlame():void {
flame = new BitmapData(
stage.stageWidth,
stage.stageHeight,
true,
0x0
);
addChild(new Bitmap(flame));
}
private function makeFields():void
{
// private var fieldGlow:GlowFilter = new GlowFilter( 0,90, [0xff0000,0xffff00], [1,1], [70, 255], 25,15 );
var field:TextField = createField();
field.filters = [ fieldGlow ]
/*field.filters = [
new GradientGlowFilter(
0, // distance
90, // angle
[0xff0000, 0xffff00], // colors
[1, 1], // alphas
[70, 255], // 色の分布
25, // blur X
15 // blur Y
)
];*/
blackField = createField();
}
private function createField():TextField
{
var field:TextField = new TextField();
field.autoSize = TextFieldAutoSize.LEFT;
field.selectable = false;
field.defaultTextFormat = new TextFormat("Impact", 80);
field.text = "[ vFX ]";
field.x = (stage.stageWidth - field.width) / 2;
field.y = stage.stageHeight - field.height;
addChild(field);
return field;
}
private function makeNoise():void
{
perlinNoise = flame.clone();
perlinSeed = int(new Date());
perlinOffset = [new Point(), new Point(100, 0), new Point(), new Point()];
}
private function applyNoise():void{
perlinNoise.perlinNoise
(
25, //| ..BASE-X
120, //| ..BASE-YY
4, //| ..NUMBER OF OCTAVES
perlinSeed, //| ..SEED
false, //| ..
true, //| ..FRACTAL
BitmapDataChannel.RED,
true,
perlinOffset
);
(perlinOffset[0] as Point).y += FLICKER_RATE;
(perlinOffset[1] as Point).y += FLICKER_RATE / 2;
}
private function drawFlame():void
{
flame.draw
(
stage,
null,
new ColorTransform(.9, .9, .9, .7)
);
flame.applyFilter(flame, flame.rect, new Point(), new BlurFilter(3, 5));
flame.scroll(0, -4);
applyNoise();
flame.applyFilter(flame, flame.rect, new Point(), new DisplacementMapFilter(
perlinNoise,
new Point(), //| px
BitmapDataChannel.RED, //| X Channel
BitmapDataChannel.RED, //| Y Channel
6,
15,
DisplacementMapFilterMode.CLAMP
)
);
}
private function onSpriteEnterFrame(event:Event):void{
blackField.visible = false;
drawFlame();
blackField.visible = true;
}
}
}