イルミネーションぽい物

by misinoe
マウスで線を書いてね
♥0 | Line 91 | Modified 2013-12-17 21:17:06 | MIT License
play

ActionScript3 source code

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

package {

    /*
    *
    * マウスで線を書いてね
    *
    */


    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.display.BitmapData;
    import flash.display.Bitmap;
    import flash.utils.Timer;
    import flash.events.TimerEvent;
    import flash.geom.Rectangle;
    import flash.text.TextField;
    import flash.display.BlendMode;
    import flash.display.Sprite;
    import flash.filters.BlurFilter;
    import flash.geom.Point;
    public class FlashTest extends Sprite {
        
        
        private var bitmapDatas:Array/* of BitmapData */ = [];
        private var bitmaps:Array/* of Bitmap*/ = [];
        private var hidePosition:int = 0;
        private var timer:Timer;
        private var drawIndex:int = 0;
        private var drawColor:uint = 0;
        
        private var baseSprite:Sprite;
        private var baseBitmapData:BitmapData;
        
        private var debugTextField:TextField;
        
       
        public function FlashTest() {
            // write as3 code here..
           trigger();
           
           debugTextField = new TextField();
           debugTextField.background = true;
           debugTextField.backgroundColor = 0xCCCCCC;
           // addChild( debugTextField );
           
           log("test");
             
            
        }
        private function log(...args):void{
            debugTextField.text = args.toString() + "\n" + debugTextField.text;   
        }
        
        private function trigger():void{
            
            this.blendMode = BlendMode.LAYER;
            
            graphics.beginFill( 0 );
            graphics.drawRect( 0, 0, stage.stageWidth, stage.stageHeight );
            //
            var bitmapData:BitmapData;
            var bitmap:Bitmap;
            for( var i:int=0;i<4;i++ ){
               bitmapData = new BitmapData( stage.stageWidth, stage.stageHeight, true, 0 );
               bitmap = new Bitmap( bitmapData );
               bitmaps.blendMode = BlendMode.ADD;
               bitmapDatas.push( bitmapData );
               addChild( bitmap );
               bitmaps.push( bitmap );
            }
            
            //
            baseSprite = new Sprite();
            
            baseSprite.filters = [new BlurFilter(5,5)];
            
            baseBitmapData = new BitmapData( 20, 20, true, 0);
            
            
            
            
            //
            timer = new Timer( 1000, 0 );
            timer.addEventListener( TimerEvent.TIMER, timerHandler );
            timer.start();
            //
            stage.addEventListener( MouseEvent.MOUSE_DOWN, stage_mouseDownHandler );
        }
        
        private function baseColor( color:int ):void{
            baseSprite.graphics.clear();
            baseSprite.graphics.lineStyle( 2, color );
            baseSprite.graphics.beginFill( 0xFFFFFF );
            baseSprite.graphics.drawCircle( 10, 10, 3 );
            
            baseBitmapData.fillRect( baseBitmapData.rect, 0 );
            baseBitmapData.draw( baseSprite );
        }
        
        private function timerHandler( ...args ):void{
            bitmaps[ hidePosition ].visible = true;
            hidePosition ++;
            if( hidePosition >= bitmaps.length ) hidePosition = 0;
            bitmaps[ hidePosition ].visible = false;
                   
        }
        
        private function stage_mouseDownHandler( event:MouseEvent ):void{
            
            timer.stop();
            
            drawIndex = (hidePosition+1)%bitmapDatas.length;
            baseColor( 0xFFFFFF*Math.random() );
            stage.addEventListener( MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler);
            stage.addEventListener( MouseEvent.MOUSE_UP, stage_mouseUpHandler)
            log("DOWN");
        }
        
        private function stage_mouseMoveHandler( event:MouseEvent ):void{
            
            
            // bitmapDatas[ drawIndex ].setPixel32( mouseX, mouseY, drawColor );
            var destPoint:Point = new Point( mouseX-baseBitmapData.width/2, mouseY-baseBitmapData.height/2 );
            bitmapDatas[ drawIndex ].copyPixels( baseBitmapData, baseBitmapData.rect, destPoint, null, null, true );
        }
        
        private function stage_mouseUpHandler( event:MouseEvent ):void{
            
            timer.start();
            timerHandler();
            
            stage.removeEventListener( MouseEvent.MOUSE_MOVE, stage_mouseMoveHandler);
            stage.removeEventListener( MouseEvent.MOUSE_UP, stage_mouseUpHandler)
        }
    }
}