一个逼真的转盘
玩法: 使用鼠标在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; } } } }

浙公网安备 33010602011771号