CircleIndicator

by ayataka
♥0 | Line 66 | Modified 2009-07-14 21:39:09 | MIT License
play

ActionScript3 source code

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

package {
    import flash.display.*;
    import flash.events.*;
    import flash.text.*;
    import flash.geom.*;
    
    [SWF(width="300", height="300")]
    public class FlashTest extends Sprite {
        
        private var cb:Sprite = new Sprite();
        private var cc:Sprite = new Sprite();
        private var c:Sprite = new Sprite();
        private var tf:TextField = new TextField();
        private var isLButtonDown:Boolean = false;
        
        private var offsetY:Number = 150;
        private var cAngle:Number = -90;
        private var tAngle:Number = 180;
        
        public function FlashTest() {
            //
            this.addChild( cb );
            cb.transform.perspectiveProjection=new PerspectiveProjection()
            cb.transform.perspectiveProjection.projectionCenter = new Point(150, 0);
            cb.transform.perspectiveProjection.focalLength;
            cb.transform.perspectiveProjection.fieldOfView = 45;
            
            //
            with( cc.graphics ) {
                lineStyle(2, 0x000000);
                drawCircle(0, 0, 100);
                moveTo(-110, 0);
                lineTo(110, 0);
                moveTo(0, -110);
                lineTo(0, 110);
                lineStyle();
            }
            for(var i:int = 0; i < 2; ++i) {
                var s:Sprite = new Sprite();
                with( s.graphics ) {
                    lineStyle(2, 0xFF0000 >> i * 8);
                    drawCircle(0, 0, 100);
                    lineStyle();
                }
                cc.addChild( s );
                s.rotationY = 60 * (i + 1);
            }
            
            //
            cb.addChild( cc );
            cc.x = 150;//this.width / 2;
            cc.y = offsetY;//this.height / 2;
            
            //
            with( c.graphics ) {
                beginFill( 0x0000FF );
                drawCircle(0, 0, 100);
                endFill();
            }
            cc.addChild( c );
            c.alpha = 0.7;
            c.rotationX = 90;
            
            //
            this.addChild( tf );
            
            //
            this.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
        
        private function enterFrameHandler(event:Event):void {
            
            //
            //c.y = this.mouseY - offsetY;
            if( (tAngle - cAngle) < 1 ) {
                tf.text = "Complete";
                cAngle = tAngle;
            }
            else {
                cAngle += (tAngle - cAngle) / 20;
            }
            c.y = Math.sin( cAngle / 180 * Math.PI ) * 100;
            ///*
            //c.y = this.mouseY - 150;
            var h:Number = c.y;
            var rate:Number = Math.cos( Math.asin( h / 100 ) );
            c.scaleX = rate;
            c.scaleY = rate;
            //*/
            //tf.text = String( cb.transform.perspectiveProjection.focalLength );
        }    
    }
}