[ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)
package
{
import flash.display.Shape;
import flash.display.Sprite;
import flash.events.MouseEvent; /**
* @author Frost.Yen
* @E-mail 871979853@qq.com
* @create 2015-7-13 上午11:14:16
*
*/
[SWF(width="800",height="600")]
public class DrawSectorTest extends Sprite
{
private var _sector:Sprite;
private var _dragSp:Sprite;
private var _radian:Number;//弧度
private const _radius:uint = 100;//半径
private const _angle:Number = 60;//初始角度
public function DrawSectorTest()
{
_sector = new Sprite();
_dragSp = new Sprite();
_sector.x = _dragSp.x = stage.stageWidth*0.5;
_sector.y = _dragSp.y = stage.stageHeight*0.5;
this.addChild(_sector);
this.addChild(_dragSp); _dragSp.graphics.beginFill(0,.2);
_dragSp.graphics.drawRect(0,-5,_radius,10);
_dragSp.graphics.endFill(); drawSector(_sector,0,0,_radius,_angle,0);
_dragSp.rotation = _angle;
_dragSp.addEventListener(MouseEvent.MOUSE_DOWN,onDragDown);
}
private function onDragDown(e:MouseEvent):void
{
stage.addEventListener(MouseEvent.MOUSE_MOVE,onDragMove);
stage.addEventListener(MouseEvent.MOUSE_UP,onDragOut);
}
private function onDragMove(e:MouseEvent):void
{
_dragSp.rotation = Math.atan2(_dragSp.parent.mouseY - _dragSp.y,_dragSp.parent.mouseX - _dragSp.x) * 180 / Math.PI ;
_radian = (_dragSp.rotation) * Math.PI / 180;
/**这是关键,因为rotation的区间是[0,180][0,-180],如果直接用_dragSp.rotation会导致拖拽绘制扇形错误*/
if (_dragSp.rotation > 180){
_radian = _radian + Math.PI;
}
if (_radian < 0){
_radian = _radian + 2 * Math.PI;
}
drawSector(_sector,0,0,_radius,_radian*180/Math.PI,0);
}
private function onDragOut(e:MouseEvent):void
{
stage.removeEventListener(MouseEvent.MOUSE_MOVE,onDragMove);
stage.removeEventListener(MouseEvent.MOUSE_UP,onDragOut); }
/**
* 绘制扇形
* @param mc 承载扇形的对象
* @param x 圆心角x
* @param y 圆心角y
* @param r 半径
* @param angle 绘制角度
* @param startAngle 起始角度
* @param color 填充颜色
* @param hasFrame 是否填充边框
*/
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 {
sp.graphics.clear();
if(hasFrame) {
sp.graphics.lineStyle(0,0xffff00);
}
sp.graphics.beginFill(color,1);
sp.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;
startAngle=startAngle*Math.PI/180;
sp.graphics.lineTo(x+r*Math.cos(startAngle),y+r*Math.sin(startAngle));
for (var i:int=1; i<=n; i++) {
startAngle+=angleA;
var angleMid:Number=startAngle-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(startAngle);
var cy:Number=y+r*Math.sin(startAngle);
sp.graphics.curveTo(bx,by,cx,cy);
}
if (angle!=360) {
sp.graphics.lineTo(x,y);
}
sp.graphics.endFill();
}
}
}
[ActionScript 3.0] 动态绘制扇形实例(拖拽绘制)的更多相关文章
- [ActionScript 3.0] Away3D 官网实例
/* Dynamic tree generation and placement in a night-time scene Demonstrates: How to create a height ...
- [ActionScript 3.0] 动态改变影片剪辑的颜色
flash.geom.ColorTransform 可使用 ColorTransform 类调整显示对象的颜色值.可以将颜色调整或颜色转换应用于所有四种通道:红色.绿色.蓝色和 Alpha 透明度. ...
- cocos2d-x 3.0 学习笔记: 一个可以拖拽的Label及schedule的应用
#ifndef _DRAGLABEL_H_ #define _DRAGLABEL_H_ #include "cocos2d.h" USING_NS_CC; class DragLa ...
- 绘制扇形效果线条小Bug解决
绘制线条基本代码: 变量: CPoint m_ptOrigin;//起点坐标 bool m_bTrue;//检查鼠标左键是否按下 CPoint m_ptOldOrigin;//记录上一次绘制终点坐标, ...
- ArcGIS JS 学习笔记2 实现仿百度的拖拽画圆
一.前言 吐槽一下,百度在国内除了百度地图是良心产品外,其他的真的不敢恭维.在上一篇笔记里,我已经实现了自定义的地图测量模块.在百度地图里面(其他地图)都有一个周边搜索的功能,拖拽画一个圆,然后以圆半 ...
- 百度地图API示例之设置级别setZoom与禁止拖拽disableDragging
百度地图API示例之设置级别setZoom与禁止拖拽disableDragging 设置级别 <html> <head> <meta http-equiv="C ...
- JQUERY 拖拽 draggable droppable resizable selectable sortable
今天用了jq ui的拖动碰撞功能,好不容易看到有详细的API解说,记录如下: <script language="JavaScript" type="text/ ...
- vue 拖拽移动(类似于iPhone虚拟home )
vue 移动端 PC 兼容 元素 拖拽移动 效果演示 事件知识点 移动端 PC端 注释 touchstart mousedown 鼠标/手指按下事件 touchmove mousemove 鼠标/手 ...
- H5 拖拽读取文件和文件夹
1)拖拽方面的重点是:ondragover 事件 和 ondrop 事件 ondragover 是必须的,ondragover 事件里禁用掉 html 的默认事件,否则 ondrop 事件将无效(直接 ...
随机推荐
- Linux Debian 下LNMP服务器——nginx+mysql+php环境搭建及配置
昨天刚给公司服务器装了LNMP服务器环境,在这里简单记录一下过程备忘. 这里我在安装的时候是用的Dotdeb源,仅供参考. 1.导入Dotdeb源,据说Dotdeb源里的软件版本比较新. 在向源中导入 ...
- glBuffers & glVertexPtrs
[glBuffers & glVertexPtrs] 1.glBuffers使得数据可以存储在显示存中. GLuint VBO; glGenBuffers(1, &VBO); glBi ...
- screen command of linux
[screen command of linux] 常用键: 补充: Ctrl-a S # split terminal horizon Ctrl-a TAB # switch to ano ...
- 01-MySQL优化大的思路
首先不是看它的表结构等等.从整体上去观察,不断去看它的状态.这个状态往往不是一两个小时可以看出来的,得写一个脚本,观察它的24小时的周期性变化,不断刷新它的脚本,观察它的Status.主要是看它有没有 ...
- 前向渲染路径细节 Forward Rendering Path Details
正向渲染路径细节 Forward Rendering Path Details Forward Rendering path renders each object in one or more pa ...
- DBArtist之Oracle入门第3步: 安装配置PL/SQL Developer
操作系统: WINDOWS 7 (64位) 数据库: Oracle 11gR2 (64位) PL/SQL Developer : PL/SQL ...
- MySQL 时间函数加减计算
一.MySQL 获得当前日期时间 函数 1.1 获得当前日期 + 时间(date + time) 函数:now() mysql> select now();+———————+| now() |+ ...
- 226. Invert Binary Tree 翻转二叉树
[抄题]: Invert a binary tree. 4 / \ 2 7 / \ / \ 1 3 6 9 to 4 / \ 7 2 / \ / \ 9 6 3 1 [暴力解法]: 时间分析: 空间分 ...
- Python学习笔记_使用openpyxl操作Excel,在同一个文件里复制某一个sheet
应用场景:定制一个Excel模板文件,其中定义了一个模板Sheet,以此模板文件里的模板sheet为样例,制作报表,里面有不止一个模板样例Sheet 一.软件环境: 1.OS:Win10 64位 2. ...
- A*搜索 概念
启发式搜索:启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标.这样可以省略大量无畏的搜索路径,提到了效率.在启发式搜索中,对位置的估价是十分重要 ...