flash on 2012-10-23

by bradsedito
Action Script 3.0イメージエフェクト
ボーンデジタル(株) Todd Yard / 永井勝則
copywright(c) Todd Yard
♥0 | Line 111 | Modified 2012-10-23 05:11:31 | MIT License
play

ActionScript3 source code

/**
 * 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;
            }
    }
}