博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
鼠标控制,扇形的大小
阅读量:6868 次
发布时间:2019-06-26

本文共 3510 字,大约阅读时间需要 11 分钟。

效果如下图:

package{	import flash.display.Sprite;	import flash.events.MouseEvent;		/**	 *  @author chb	 *  @Email 645338868@qq.com	 *  @data 2015-8-28	 *	 **/	[SWF(width="724",height="513",frameRate="60",backgroundColor="0x00cfff")]	public class DrawSector extends Sprite	{		private var sectorSp:Sprite;		private var dragLineSp:Sprite;		private var radius:Number;//半径长		private var initRotation:Number;//初始角度				private var currentRotation:Number;				public function DrawSector()		{			init();		}				private function init():void		{						sectorSp = new Sprite();			this.addChild(sectorSp);			dragLineSp = new Sprite();			this.addChild(dragLineSp);						sectorSp.x = dragLineSp.x = stage.stageWidth*0.5;			sectorSp.y = dragLineSp.y = stage.stageHeight*0.5;						radius = 200;			initRotation = 60;						dragLineSp.graphics.lineStyle(2,0xffff00,1);			dragLineSp.graphics.moveTo(radius,0);			dragLineSp.graphics.lineTo(0,0);						dragLineSp.graphics.beginFill(0xffff00,1);			dragLineSp.graphics.drawCircle(radius,0,5);			dragLineSp.graphics.endFill();						dragLineSp.rotation = initRotation;			drawSectorFun(sectorSp,0,0,radius,initRotation,0,0x990000,true);			dragLineSp.addEventListener(MouseEvent.MOUSE_DOWN,onDragStart);					}				private function onDragStart(e:MouseEvent):void		{			stage.addEventListener(MouseEvent.MOUSE_MOVE,onDragMove);			stage.addEventListener(MouseEvent.MOUSE_UP,onDragStop);		}				private function onDragMove(e:MouseEvent):void		{			dragLineSp.rotation = Math.atan2(dragLineSp.parent.mouseY - dragLineSp.y,dragLineSp.parent.mouseX - dragLineSp.x) * 180 / Math.PI ;//直线随着鼠标旋转			currentRotation = dragLineSp.rotation;			/**这是关键,因为rotation的区间是[0,180][0,-180],如果直接用dragLineSp.rotation会导致拖拽绘制扇形错误*/			if(dragLineSp.rotation < 0)			{				currentRotation = dragLineSp.rotation + 360;			}			trace(currentRotation);			drawSectorFun(sectorSp,0,0,radius,currentRotation,0,0x990000,true);					}		private function onDragStop(e:MouseEvent):void		{			stage.removeEventListener(MouseEvent.MOUSE_MOVE,onDragMove);			stage.removeEventListener(MouseEvent.MOUSE_UP,onDragStop);		}				/**		 * 画扇形		 * @param  mc        扇形的容器		 * @param  x         扇形的 x 坐标		 * @param  y         扇形的 y 坐标		 * @param  r         扇形的 半径		 * @param  angle     扇形的 角度		 * @param  startFrom 扇形的初始位置,即从什么位子开始画		 * @param  color     扇形填充色		 * @param  hasLine   是否描边		 * 		 */				private function drawSectorFun(mc:Sprite, x:Number = 200, y:Number = 200, r:Number = 100, angle:Number = 27, startFrom:Number = 270, color:Number = 0xff00ff, hasLine:Boolean = false):void		{			mc.graphics.clear();			mc.graphics.beginFill(color, 1);			if(hasLine)			{				mc.graphics.lineStyle(2,0x0000ff);			}			mc.graphics.moveTo(x, y);			angle = (Math.abs(angle) > 360)?360:angle;			var n:Number = Math.ceil(Math.abs(angle) / 45);			var angleA:Number = angle / n;			angleA = angleA * Math.PI / 180;			startFrom = startFrom * Math.PI / 180;			mc.graphics.lineTo(x + r * Math.cos(startFrom), y + r * Math.sin(startFrom));			for (var i:Number = 1; i <= n; i++)			{				startFrom +=  angleA;				var angleMid:Number = startFrom - angleA / 2;				var bx:Number = x + r / Math.cos(angleA / 2) * Math.cos(angleMid);				var by:Number = y + r / Math.cos(angleA / 2) * Math.sin(angleMid);				var cx:Number = x + r * Math.cos(startFrom);				var cy:Number = y + r * Math.sin(startFrom);				mc.graphics.curveTo(bx, by, cx, cy);			}			if (angle != 360)			{				mc.graphics.lineTo(x, y);			}			mc.graphics.endFill();		}	}}

  

  

转载于:https://www.cnblogs.com/chen-mo/p/4767122.html

你可能感兴趣的文章
JavaScript常用函数以及语法
查看>>
Nginx与tomcat组合的简单使用
查看>>
查看电脑核数以及线程数
查看>>
栈和队列
查看>>
va_list、va_start和va_end使用
查看>>
pkill命令详解
查看>>
【原】视图学习
查看>>
The Mega Guide to Free SQL Server Tools
查看>>
C语言的基础输入输出
查看>>
IOS学习笔记
查看>>
流水线参数的计算问题
查看>>
MySQL高级
查看>>
ubuntu14.04上设置默认python命令是执行python3而不是Python2
查看>>
[20180124]奇怪的SQL*Net message from dblink.txt
查看>>
用户自定义类型03 - 零基础入门学习Delphi33
查看>>
win10安装Redis方法以及基本配置
查看>>
集成 报表与打印功能在 Microsoft Visual Studio LightSwitch
查看>>
Android--应用开发2(AndroidManfest.xml)
查看>>
在使用seek()函数时,有时候会报错为 “io.UnsupportedOperation: can't do nonzero cur-relative seeks”,代码如下:...
查看>>
PHP基本知识收集
查看>>