flash on 2009-12-31

by _wonder
♥0 | Line 88 | Modified 2009-12-31 23:13:16 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.filters.GlowFilter;
    import flash.geom.Point;
    
    [SWF(width="465",height="465",backgroundColor="0x000000",frameRate="30")]
    public class WonderflBook extends Sprite {
        
        private var _ball:Sprite;
        private var _timeGage:Sprite;
        private var _locus:Sprite;
        
        private var _startX:Number = 0;
        private var _endX:Number = stage.stageWidth;
        private var _startY:Number = stage.stageHeight/2;
        private var _frameCount:uint = 0;
        private var _frameCountLimit:uint = 150;
        private var _animationFrames:Array;
        public function WonderflBook() {
            init();           
        }
        
        private function init():void{
            _animationFrames = generate_animationFrames();
            
            _ball = new Sprite();
            _ball.graphics.lineStyle(1,0x00FFFF);
            _ball.graphics.beginFill(0x00FFFF,0.2);
            _ball.graphics.drawCircle(0,0,5);
            _ball.graphics.endFill();
            
            _timeGage = new Sprite();
            _timeGage.graphics.beginFill(0xFFFFFF,0.5);
            _timeGage.graphics.drawRect(0,0,stage.stageWidth,3);
            _timeGage.graphics.endFill();
            _timeGage.x = -1;
            _timeGage.y = stage.stageHeight-3;
            
            _locus = new Sprite();
            
            _ball.filters=[new GlowFilter(0x00FFFF,1,16,16,2,2)];
            
            addChild(_locus);
            addChild(_timeGage);
            addChild(_ball);
            
            stage.addEventListener(MouseEvent.MOUSE_DOWN,startRec);
            stage.addEventListener(MouseEvent.MOUSE_UP,stopRec);
            
            updateLocus();
            
            start();
        }
        
        private function generate_animationFrames():Array{
            var tmp:Array = new Array();
            var easeRatio:Number = 0.1;
            var tmpX:Number = _startX;
            var tmpY:Number = _startY;
            
            for(var i:uint=0;i<_frameCountLimit;i++){
                tmpX += (_endX-tmpX)*easeRatio;
                tmp.push(new Point(tmpX,tmpY));
            }
            return tmp;
        }
        
        private function render(e:Event):void{
            if(_frameCount < _frameCountLimit){
                _ball.x += (_animationFrames[_frameCount].x - _ball.x)/4;
                _ball.y += (_animationFrames[_frameCount].y - _ball.y)/4;
            } else {
                _frameCount = 0;
            }
            _timeGage.width = (_frameCount/_frameCountLimit)*stage.stageHeight;
            _frameCount++;
        }
        
        private function start():void{addEventListener(Event.ENTER_FRAME,render);};
        private function stop():void{removeEventListener(Event.ENTER_FRAME,render);};
        
        private function startRec(e:Event):void{
            addEventListener(Event.ENTER_FRAME,recMouse);
        }
        
        private function stopRec(e:Event):void{
            removeEventListener(Event.ENTER_FRAME,recMouse);
        }
        
        private function recMouse(e:Event):void{
            if(_frameCount < _frameCountLimit){
                _animationFrames[_frameCount].x = mouseX;
                _animationFrames[_frameCount].y = mouseY;
                updateLocus();
            }
        }
        
        private function updateLocus():void{
            _locus.graphics.clear();
            _locus.graphics.lineStyle(1,0xFFFFFF,0.2);
            for(var i:uint=0;i<_frameCountLimit;i++){
                _locus.graphics.drawCircle(_animationFrames[i].x,_animationFrames[i].y,2);
            }
        }
        
    }
}