[ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)

  1 package
  2 {
  3     import flash.display.Shape;
  4     import flash.display.Sprite;
  5     import flash.events.MouseEvent;
  6
  7     /**
  8      * @author Frost.Yen
  9      * @E-mail [email protected]
 10      * @create 2015-7-13 上午11:14:16
 11      *
 12      */
 13     [SWF(width="800",height="600")]
 14     public class DrawSectorTest extends Sprite
 15     {
 16         private var _sector:Sprite;
 17         private var _dragSp:Sprite;
 18         private var _radian:Number;//弧度
 19         private const _radius:uint = 100;//半径
 20         private const _angle:Number = 60;//初始角度
 21         public function DrawSectorTest()
 22         {
 23             _sector = new Sprite();
 24             _dragSp = new Sprite();
 25             _sector.x = _dragSp.x = stage.stageWidth*0.5;
 26             _sector.y = _dragSp.y = stage.stageHeight*0.5;
 27             this.addChild(_sector);
 28             this.addChild(_dragSp);
 29
 30
 31             _dragSp.graphics.beginFill(0,.2);
 32             _dragSp.graphics.drawRect(0,-5,_radius,10);
 33             _dragSp.graphics.endFill();
 34
 35             drawSector(_sector,0,0,_radius,_angle,0);
 36             _dragSp.rotation = _angle;
 37             _dragSp.addEventListener(MouseEvent.MOUSE_DOWN,onDragDown);
 38         }
 39         private function onDragDown(e:MouseEvent):void
 40         {
 41             stage.addEventListener(MouseEvent.MOUSE_MOVE,onDragMove);
 42             stage.addEventListener(MouseEvent.MOUSE_UP,onDragOut);
 43         }
 44         private function onDragMove(e:MouseEvent):void
 45         {
 46             _dragSp.rotation = Math.atan2(_dragSp.parent.mouseY - _dragSp.y,_dragSp.parent.mouseX - _dragSp.x) * 180 / Math.PI ;
 47             _radian = (_dragSp.rotation) * Math.PI / 180;
 48             /**这是关键,因为rotation的区间是[0,180][0,-180],如果直接用_dragSp.rotation会导致拖拽绘制扇形错误*/
 49             if (_dragSp.rotation > 180){
 50                 _radian = _radian + Math.PI;
 51             }
 52             if (_radian < 0){
 53                 _radian = _radian + 2 * Math.PI;
 54             }
 55             drawSector(_sector,0,0,_radius,_radian*180/Math.PI,0);
 56         }
 57         private function onDragOut(e:MouseEvent):void
 58         {
 59             stage.removeEventListener(MouseEvent.MOUSE_MOVE,onDragMove);
 60             stage.removeEventListener(MouseEvent.MOUSE_UP,onDragOut);
 61
 62         }
 63         /**
 64          * 绘制扇形
 65          * @param    mc 承载扇形的对象
 66          * @param    x 圆心角x
 67          * @param    y 圆心角y
 68          * @param    r 半径
 69          * @param    angle 绘制角度
 70          * @param    startFrom 起始角度
 71          * @param    color 填充颜色
 72          * @param    hasFrame 是否填充边框
 73          */
 74         private function drawSector(sp:Sprite,x:Number=0,y:Number=0,r:Number=100,angle:Number=60,startAngle:Number=0,color:Number=0xff0000,hasFrame:Boolean=true):void {
 75             sp.graphics.clear();
 76             if(hasFrame) {
 77                 sp.graphics.lineStyle(0,0xffff00);
 78             }
 79             sp.graphics.beginFill(color,1);
 80             sp.graphics.moveTo(x,y);
 81             angle=(Math.abs(angle)>360)?360:angle;
 82             var n:Number=Math.ceil(Math.abs(angle)/45);
 83             var angleA:Number=angle/n;
 84             angleA=angleA*Math.PI/180;
 85             startAngle=startAngle*Math.PI/180;
 86             sp.graphics.lineTo(x+r*Math.cos(startAngle),y+r*Math.sin(startAngle));
 87             for (var i:int=1; i<=n; i++) {
 88                 startAngle+=angleA;
 89                 var angleMid:Number=startAngle-angleA/2;
 90                 var bx:Number=x+r/Math.cos(angleA/2)*Math.cos(angleMid);
 91                 var by:Number=y+r/Math.cos(angleA/2)*Math.sin(angleMid);
 92                 var cx:Number=x+r*Math.cos(startAngle);
 93                 var cy:Number=y+r*Math.sin(startAngle);
 94                 sp.graphics.curveTo(bx,by,cx,cy);
 95             }
 96             if (angle!=360) {
 97                 sp.graphics.lineTo(x,y);
 98             }
 99             sp.graphics.endFill();
100         }
101     }
102 }
时间: 2024-10-13 18:11:30

[ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)的相关文章

[ActionScript 3.0] Away3D 官网实例

1 /* 2 3 Dynamic tree generation and placement in a night-time scene 4 5 Demonstrates: 6 7 How to create a height map and splat map from scratch to use for realistic terrain 8 How to use fratacl algorithms to create a custom tree-generating geometry

[ActionScript 3.0] 动态改变影片剪辑的颜色

flash.geom.ColorTransform 可使用 ColorTransform 类调整显示对象的颜色值.可以将颜色调整或颜色转换应用于所有四种通道:红色.绿色.蓝色和 Alpha 透明度. 当 ColorTransform 对象应用于显示对象时,将按如下方法为每个颜色通道计算新值: 新红色值 = (旧红色值 * redMultiplier) + redOffset 新绿色值 = (旧绿色值 * greenMultiplier) + greenOffset 新蓝色值 = (旧蓝色值 *

绘制扇形效果线条小Bug解决

绘制线条基本代码: 变量: CPoint m_ptOrigin;//起点坐标 bool m_bTrue;//检查鼠标左键是否按下 CPoint m_ptOldOrigin;//记录上一次绘制终点坐标,用于绘制边界线 初始化: m_ptOrigin = 0; m_bTrue = false; m_ptOldOrigin = 0; 代码实现: void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){ // TODO: Add your mes

JQUERY 拖拽 draggable droppable resizable selectable sortable

今天用了jq ui的拖动碰撞功能,好不容易看到有详细的API解说,记录如下: <script language="JavaScript" type="text/javascript" src="ui/jquery-1.8.2.js"></script> <script language="JavaScript" type="text/javascript" src="

Android drawPath实现QQ拖拽泡泡

这两天学习了使用Path绘制贝塞尔曲线相关,然后自己动手做了一个类似QQ未读消息可拖拽的小气泡,效果图如下: 接下来一步一步的实现整个过程. 基本原理 其实就是使用Path绘制三点的二次方贝塞尔曲线来完成那个妖娆的曲线的.然后根据触摸点不断绘制对应的圆形,根据距离的改变改变原始固定圆形的半径大小.最后就是松手后返回或者爆裂的实现. Path介绍: 顾名思义,就是一个路径的意思,Path里面有很多的方法,本次设计主要用到的相关方法有 moveTo() 移动Path到一个指定的点 quadTo()

ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆

一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半径进行搜索(也就是缓冲区╮(╯_╰)╭). 这次的目标,就是要山寨这个拖拽画圆的功能,我先放一个效果图. 二.开始山寨 我们先想一想要实现这个功能需要哪些步骤. 拖拽 画圆 通知拖拽结束 2.1 实现拖拽 关于拖拽,有graphicslayer的拖拽事件和map的拖拽事件,如何选择呢?先来看一看官方

拖拽上传功能

拖拽上传功能旨在实现拖拽文件或者图片上传到你想要保存到的地方.此处上传的是xml文件,可以在里面对文件类型进行限制: 声明:现在的ie浏览器9及以下的版本并不支持该方法实现拖拽上传,如果有大神可以分享ie9及以下的拖拽上传方法将不胜感激: 代码: <body><div id="div">    <h1 align="center">拖拽上传</h1>    <form   id="form1"

WinForm 实现拖拽文件

1.AllowDrop属性要设置为True2.C#代码参考一下写法 #region dgvResult_DragDrop 拖拽完成时,读取文件名全路径 /// <summary> /// 拖拽完成时,读取文件名全路径 /// </summary> /// <param name="sender"></param> /// <param name="e"></param> private void

Jquery 可拖拽的Ztree

比较懒,就只贴关键代码吧,自己把有用的属性全部打印出来了,也加了不少注释. 保存后涉及到的排序问题,刷新问题还未涉及到,后面有的话再加. 1 $.fn.zTree.init($("#ztree"), { 2 data: { 3 simpleData: { 4 enable: true 5 } 6 }, 7 view:{ 8 selectedMulti :false 9 }, 10 edit: { //此属性添加后,树才可以被拖拽 11 enable: true, 12 showRemo