一个逼真的转盘

玩法: 使用鼠标在flash区域里模拟手势滑动

 

package 
{
    import flash.display.Sprite;
    import flash.display.Shape;
    import flash.events.MouseEvent;
    import flash.events.Event;
    import com.greensock.TweenMax;

    public final class Main extends Sprite
    {
        private var speed:Number = 0;
        private var paddles:Vector.<Sprite> = new Vector.<Sprite>();
        private var line:Shape;
        private var lastPaddle:String;
        
        public final function Main():void
        {
            //显示对象集合 转盘上的10个点
            paddles.push(wheel.p1, wheel.p2, wheel.p3, wheel.p4, wheel.p5, wheel.p6, wheel.p7, wheel.p8, wheel.p9, wheel.p10);
            //注册事件
            listeners('add');
        }
        //增加和移除鼠标的事件
        private final function listeners(action:String):void
        {
            if(action == 'add')
            {
                stage.addEventListener(MouseEvent.MOUSE_DOWN, startDraw);
                stage.addEventListener(MouseEvent.MOUSE_UP, spinWheel);
            }
            else
            {
                stage.removeEventListener(MouseEvent.MOUSE_DOWN, startDraw);
                stage.removeEventListener(MouseEvent.MOUSE_UP, spinWheel);
            }
        }
        
        //开始画移动轨迹
        private final function startDraw(e:MouseEvent):void
        {
            //显示容器
            line = new Shape();
            addChild(line);
            //移动样式加移动画线
            line.graphics.moveTo(mouseX, mouseY);
            line.graphics.lineStyle(8, 0x000000, 0.3);
            stage.addEventListener(MouseEvent.MOUSE_MOVE, drawLine);
        }
        
        //----  鼠标移动时画线  --------
        private final function drawLine(e:MouseEvent):void
        {
            line.graphics.lineTo(mouseX, mouseY);
        }
        
        //----  鼠标抬起后开始转轮子  -------
        private final function spinWheel(e:MouseEvent):void
        {
            //舞台移除移动事件和鼠标事件
            stage.removeEventListener(MouseEvent.MOUSE_MOVE, drawLine);
            listeners('rm');
            //计算旋转速度,根据画线的水平落差高度
            speed = line.height * 0.1;
            //移除线并内存清空
            removeChild(line);
            line = null;
            //开始轮盘旋转
            stage.addEventListener(Event.ENTER_FRAME, spin);
        }
        
        //-----  旋转  --------
        private final function spin(e:Event):void
        {
            /* Rotate Wheel 旋转轮子*/
            
            wheel.rotationZ += speed;
            
            /* Detect Value 侦测最后碰到指针的值 */
            
            for(var i:int = 0; i < 10; i++)
            {
                //碰撞,对象间的碰撞
                if(indicator.hArea.hitTestObject(paddles[i]))
                {
                    lastPaddle = paddles[i].name;
                }
            }
            
            /* Decrease speed  速度递减*/
            speed -= 0.1;
            
            /* Remove lIstener and reset speed when wheel stops 
               如果速度为0 这停止
            */
            
            if(speed <= 0)
            {
                //移除事件
                stage.removeEventListener(Event.ENTER_FRAME, spin);
                speed = 10;
                //根据最后的落脚点,来显示底部颜色值
                run(lastPaddle);
                listeners('add');
            }
        }
        
        //----   显示最终的颜色区域值  ---------
        function run(action:String):void
        {
            switch(action)
            {
                case 'p1':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xF15D5D, tintAmount:1}});
                    break;
                case 'p2':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xC06CA8, tintAmount:1}});
                    break;
                case 'p3':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x644D9B, tintAmount:1}});
                    break;
                case 'p4':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x5E98C6, tintAmount:1}});
                    break;
                case 'p5':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x4789C2, tintAmount:1}});
                    break;
                case 'p6':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x55C4CB, tintAmount:1}});
                    break;
                case 'p7':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x57BC80, tintAmount:1}});
                    break;
                case 'p8':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0x90CC6C, tintAmount:1}});
                break;
                case 'p9':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xEBE666, tintAmount:1}});
                break;
                case 'p10':
                    TweenMax.to(colorMC, 0.5, {colorTransform:{tint:0xF29C69, tintAmount:1}});
                    break;
            }
        }
    }
}

 

posted @ 2013-12-12 10:23  无名盗闪  阅读(369)  评论(0)    收藏  举报