forked from: flash on 2009-10-7

by Takayuki.Yamazaki
♥0 | Line 95 | Modified 2014-08-01 13:42:32 | MIT License
play

ActionScript3 source code

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

// forked from rao_monteiro's flash on 2009-10-7
package {		
    import flash.display.*;
    import flash.display.BitmapData;
    import flash.geom.Rectangle;	
    import flash.geom.Matrix;	
    import flash.events.*;  
    import flash.utils.Timer;	import flash.filters.*;	
    import caurina.transitions.Tweener;	
    import caurina.transitions.properties.FilterShortcuts;	
    
    public class BitmapSnapShot extends MovieClip{			
        		public var box:Sprite;	
        		public var img:MovieClip;		
        		private var bitmapimg:BitmapData;		
        		private var pictures:Array = new Array();	
        		private var total:uint;	
        		private var count:uint = total;		
        		private var posx:uint;	
        		private var posy:uint;		
        		private  var minuteTimer:Timer;		
        		private var cols:Number;		
        		private var rows:Number;		
        		private var bw:Number = 400;		
        		private var bh:Number = 400;		
        		public var snapSize:Number = 40;	
        					
        		public function BitmapSnapShot(){			
        		    init(snapSize);		
        		}
        		
        		public function init(snapSize:Number = 40):void{		
        		    FilterShortcuts.init();
        		    box = new Sprite();			
        		    box.graphics.beginFill(0x003399);			
        		    box.graphics.drawRect(0,0,bw,bh)			
        		    box.graphics.endFill();			
        		    box.x = 20;			
        		    box.y = 20;			
        		    addChild(box);			
        		    cols = box.width / snapSize;			
        		    rows = box.height / snapSize;			
        		    total = cols * rows;			
        		    count = total;			
        		    bitmapimg = new BitmapData(snapSize, snapSize,false,0x000000);		
        		    for (var i:uint = 0; i < total; i++) {			
        		        	img = new MovieClip();			   
        		        	 addChild(img);				
        		        	 var myBitmap:Bitmap = new Bitmap(bitmapimg);		
        		        	  img.addChild(myBitmap);				
        		        	  pictures.push(img);						
        		        	  pictures[i].x = box.x + (i % cols) * snapSize;				
        		        	  pictures[i].y = box.y + Math.floor(i / rows) * snapSize;				
        		        	  pictures[i].alpha = .9;				
        		        	  bitmapimg.draw(box);			
        		        	  }			
        		       box.visible = false;			
        		       startAnimation();
			}
			private function startAnimation():void{
			    var calcTime:Number = total+1;           
			    minuteTimer = new Timer(1,calcTime);           
			    minuteTimer.addEventListener(TimerEvent.TIMER, Animate);            
			    minuteTimer.addEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);            
			    minuteTimer.start();
			}
			
			private function ranDom(min:Number, max:Number):Number {
			    var randomNum:Number = Math.floor(Math.random() * (max - min )) + min;			
			    return randomNum;
			}
			
			private function Animate(e:TimerEvent):void {
			    if (count >= 0) {				
			        var clip:MovieClip = pictures[count];				
			        var rot:Number = ranDom(-200, 250);				
			        Tweener.addTween(clip,{rotation:rot,time:5,transition:"linear"});		
			        Tweener.addTween(clip,{ y:stage.stageHeight+80,time:1.5,transition:"easeInOutBack", transitionParams:{overshoot:0.1}});				
			        Tweener.addTween(clip,{alpha:0,time:1,transition:"easeInQuart"});	
			        Tweener.addTween(clip,{_Blur_blurX:10,_Blur_blurY:10,time:.2,transition:"linear"});				
			        if(count <= 0){ 					
			            AllDone();				
			         }				
			         count--;							
			      }
			}
			
			public function onTimerComplete(event:TimerEvent):void{
			    			minuteTimer.stop();			
			    			removeEventListener(TimerEvent.TIMER, Animate);			
			    			removeEventListener(TimerEvent.TIMER_COMPLETE, onTimerComplete);
			}
			
			private function AllDone():void{
			    count = 0;				
			    total = 0;				
			    rows = 0;				
			    cols = 0;				
			    pictures = [];			
			    dispatchEvent(new Event("all done animation")); 
			}
	}
}