HANABI

by kohie_yamashima
♥0 | Line 86 | Modified 2009-05-18 21:33:08 | MIT License
play

ActionScript3 source code

/**
 * Copyright kohie_yamashima ( http://wonderfl.net/user/kohie_yamashima )
 * MIT License ( http://www.opensource.org/licenses/mit-license.php )
 * Downloaded from: http://wonderfl.net/c/fOEB
 */

package {
   
    import caurina.transitions.Tweener  
    import flash.display.*;
    import flash.events.*;
    import flash.geom.*;
    import flash.text.*;
        
    
    public class FireFlower extends Sprite {
        private var pointer:int, frame:int, frameCounter:int, bouns:int;
        private var SPEED_FO:Number = 0.1;
        private var canvas_bd:BitmapData;
        private var ctf:ColorTransform;
        private var temp:Sprite;
        private var tf:TextField;
        
        
        
        public function FireFlower () {
        addEventListener( Event.ADDED_TO_STAGE, added );
           
        }
        
        private function added( e:Event ):void {
        if ( e.target == this ) {
        removeEventListener( e.type, arguments.callee );
                
                stage.quality = StageQuality.LOW;
                stage.frameRate = 60;
                
                setup();   
            }    
        }

        
        private function setup():void {
            canvas_bd = new BitmapData( stage.stageWidth, stage.stageHeight, false, 0x000000 );
            addChild( new Bitmap( canvas_bd ) );
            
            ctf = new ColorTransform( SPEED_FO, SPEED_FO, SPEED_FO, 1.0 );            
            temp = new Sprite();           
            tf = new TextField();
            tf.x = 5;
            tf.y = 5;
            tf.textColor = 0x00000;
            tf.mouseEnabled = false;
            addChild( tf );
            
            addEventListener( Event.ENTER_FRAME, update, false, 10 );
            stage.addEventListener("click",createFlower); 
        }
        
         private function createFlower(event:MouseEvent):void {
            var cx:Number = mouseX;
            var cy:Number = mouseY;
            var color:uint = [Math.random()*0x1000000][Math.floor(3*Math.random())];
            
            for ( var i:int = 0; i < 256; ++i ) {
                fire( cx, cy, color );
            }
        
        }
        private function update( e:Event ):void {
            canvas_bd.unlock();
            canvas_bd.lock();
            canvas_bd.colorTransform( canvas_bd.rect, ctf );
            
            tf.text = temp.numChildren.toString();
        }
        
                  
        
        
        private function fire( cx:Number, cy:Number, color:uint ):void {
            var x:Number = cx;
            var y:Number = cy;
            var v:Number = 2*Math.random();
            var r:Number = 2*Math.PI * Math.random();
            
            var vx:Number = v * Math.cos( r );
            var vy:Number = v * Math.sin( r );
            var vr:Number = 0.02;
            var dir:Number = 1 - 2*Math.floor( 2*Math.random() );
            
            var count:int = 0;
            var size:Number = 1;
            var rect:Rectangle = new Rectangle( x, y, 2*size, 2*size );
            
            var bullet:Sprite = new Sprite();
            temp.addChild( bullet );
            
            bullet.addEventListener( Event.ENTER_FRAME, function( e:Event ):void {
                vy += 0.01;
                x += vx;
                y += vy;
                rect.x = x - size;
                rect.y = y - size;
                
                count++;
                
                if ( Math.random() < Math.max( 0.05, 1-count/100 ) ) {
                    canvas_bd.fillRect( rect, color );
                }
               
                if ( ( count > 120 ) || ( canvas_bd.rect.contains( x, y ) == false ) ) {
                    bullet.removeEventListener( e.type, arguments.callee );
                    bullet.graphics.clear();
                    temp.removeChild( bullet );
                    bullet = null;
                }
            }, false, 1 );
        }
    }
}