forked from: follow ball

by jules forked from follow ball (diff: 2)
♥0 | Line 75 | Modified 2011-01-06 19:53:30 | MIT License
play

ActionScript3 source code

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

// forked from debosotnas's follow ball
package {
    import flash.events.Event;
    import flash.display.Sprite;
    import flash.display.MovieClip;
    import flash.events.MouseEvent;
    
    public class FlashTest extends Sprite {
        
        private var fuerza:Number = .5;
        private var vx:Number = 0;
        private var vy:Number = 0;
        private var easing:Number = .2;
        private var spring:Number = 100;
        private var friction:Number = .95;
        
        private var tmp_vx:Number = 0;
        private var tmp_vy:Number = 0;
        
        public var mc:MovieClip;

        public var tmp_d:uint = 1;        
        
        public function FlashTest() {
            
            mc = new MovieClip();
            
            mc.graphics.beginFill(0x9F9F9F);
            mc.graphics.drawCircle(0,0,40);
            mc.graphics.beginFill(0xF0F0F0);
            mc.graphics.drawCircle(0,0,30);
            mc.graphics.beginFill(0x9F9F9F);
            mc.graphics.drawRect(0,-5,30, 10);
            
            addChild(mc);
            
            mc.addEventListener(MouseEvent.MOUSE_DOWN, on_m_down);
            mc.buttonMode = true;

            addEventListener(Event.ENTER_FRAME, on_enter_frame);
        }
        
        private function on_m_down(e:MouseEvent):void{
            mc.startDrag();
            stage.addEventListener(MouseEvent.MOUSE_UP, on_m_up);            
        }
         private function on_m_up(e:MouseEvent):void{
            mc.stopDrag();
            stage.removeEventListener(MouseEvent.MOUSE_UP, on_m_up);            
        }
        
        private function on_enter_frame(e:Event):void{
            var dif_X:Number = this.mouseX - mc.x;
            var dif_Y:Number = this.mouseY - mc.y;
            var rad_ang_tmp:Number = Math.atan2(dif_X, dif_Y);
            var grad_ang_tmp:Number = rad_ang_tmp * 180 / Math.PI;
            
            if(tmp_d == 1){
                
                if(Math.abs(dif_X) <= fuerza && Math.abs(dif_Y) <= fuerza){
                    return;
                }
                mc.rotation = -(grad_ang_tmp - 90);
                var ax:Number = Math.sin(rad_ang_tmp) * fuerza;
                var ay:Number = Math.cos(rad_ang_tmp) * fuerza;
                
                vx += ax;
                vy += ay;
                
                mc.x += vx;
                mc.y += vy;
                
            }else if(tmp_d == 2){
                var _vx:Number = (mouseX - mc.x) * easing;
                var _vy:Number = (mouseY - mc.y) * easing;
                mc.x += _vx;
                mc.y += _vy;
            }else if(tmp_d == 3){
                var ttx:Number = stage.stageWidth / 2;
                var tty:Number = stage.stageHeight / 2;
                var dx:Number = mouseX - mc.x;
                var _ax:Number = dx * spring;
                var dy:Number = mouseY - mc.y;
                var _ay:Number = dy * spring;
                tmp_vy += _ay;
                tmp_vy *= friction;
                mc.y += tmp_vy;
                
                tmp_vx += _ax;
                tmp_vx *= friction;
                mc.x += tmp_vx;
            }


            /*
            return;
            //follow mouse overflow
            var dif_X:Number = this.mouseX - mc.x;
            var dif_Y:Number = this.mouseY - mc.y;
            /--*
            if(Math.abs(dif_X) <= fuerza && Math.abs(dif_Y) <= fuerza){
                //vx = vy = 0;
                return;
            }
            *--/
            var rad_ang_tmp:Number = Math.atan2(dif_X, dif_Y);
            var grad_ang_tmp:Number = rad_ang_tmp * 180 / Math.PI;
            mc.rotation = -(grad_ang_tmp - 90);
            /--*
            var ax:Number = Math.sin(rad_ang_tmp) * fuerza;
            var ay:Number = Math.cos(rad_ang_tmp) * fuerza;
            
            vx += ax;
            vy += ay;
            
            mc.x += vx;
            mc.y += vy;
            *--/
            /--*
            follow mouse easing
            var vx:Number = (mouseX - mc.x) * easing;
            var vy:Number = (mouseY - mc.y) * easing;
            mc.x += vx;
            mc.y += vy;
            *--/
            
            //follow mouse spring
            var ttx:Number = stage.stageWidth / 2;
            var tty:Number = stage.stageHeight / 2;
            var dx:Number = mouseX - mc.x;
            var ax:Number = dx * spring;
            var dy:Number = mouseY - mc.y;
            var ay:Number = dy * spring;
            tmp_vy += ay;
            tmp_vy *= friction;
            mc.y += tmp_vy;
            
            tmp_vx += ax;
            tmp_vx *= friction;
            mc.x += tmp_vx;
            */
        }

    }
}