AS3.0绘图API:

/**
*
* *-------------------*
* | *** 绘图API *** |
* *-------------------*
*
* 编辑修改收录:fengzi(疯子、wu341、wgq341)
*
* 不会写代码,我是代码搬运工。
*
* 联系方式:QQ(493712833)。
*
* 随 笔: https://www.cnblogs.com/fengziwu/
*
* 版权协议:请自觉遵守LGPL协议,欢迎修改、复制、转载、传播给更多需要的人。
* 免责声明:任何因使用此软件导致的纠纷与软件/程序开发者无关。
* 日 期: 2019.05.08
*
* * ------------------ Example -------------------- *
*
var s:Sprite=new Sprite()
addChild(DrawingUtil.drawDashed(s,new Point(0,0),new Point(300,300)))
*/ package fengzi.drawing
{
import flash.display.Sprite;
import flash.geom.Point;
import flash.display.LineScaleMode;
import flash.display.CapsStyle;
import flash.display.GradientType;
import flash.geom.Matrix;
import flash.display.SpreadMethod;
import flash.display.InterpolationMethod; public class DrawingUtil extends Sprite
{ public function DrawingUtil()
{
// constructor code
} /***
* drawDashed 虚线
* @param sprite Sprite对象
* @param beginPoint 起始点坐标 new Point(0,0)
* @param endPoint 终点坐标 new Point(100,100)
* @param width 虚线短线的长度
* @param height 虚线的粗细
* @param grap 虚线短线之间的间隔
* @param color 虚线颜色
* @param alpha 颜色透明度
***/ public static function drawDashed(sprite:Sprite,beginPoint:Point,endPoint:Point,grap:Number=2,width:Number=6,height:Number=1,color:uint=0xff00ff,alpha:Number=1.0):void
{
sprite.graphics.clear();
if (! beginPoint || ! endPoint || width <= 0 || grap <= 0)
{
return;
}
sprite.graphics.lineStyle(height,color,alpha,false,LineScaleMode.NONE,CapsStyle.NONE); var Ox:Number = beginPoint.x;
var Oy:Number = beginPoint.y; var radian:Number = Math.atan2(endPoint.y - Oy,endPoint.x - Ox);
var totalLen:Number = Point.distance(beginPoint,endPoint);
var currLen:Number = 0;
var x:Number,y:Number; while (currLen <= totalLen)
{
x = Ox + Math.cos(radian) * currLen;
y = Oy + Math.sin(radian) * currLen;
sprite.graphics.moveTo(x,y); currLen += width;
if (currLen > totalLen)
{
currLen = totalLen;
} x = Ox + Math.cos(radian) * currLen;
y = Oy + Math.sin(radian) * currLen;
sprite.graphics.lineTo(x,y);
sprite.graphics.endFill(); currLen += grap;
} } /***
* drawRect 矩形
* @param sprite Sprite对象
* @param x X坐标
* @param y Y坐标
* @param w 宽度
* @param h 高度
* @param bgColor 填充颜色(值为0无填充)
* @param lineColor 边框颜色(值为0无边框)
* @param a 透明度(0-1)
* @param px 边框粗细(px)
***/ public static function drawRect(sprite:Sprite,x:Number,y:Number,w:Number,h:Number,bgColor:uint=0xff00ff,lineColor:uint=0,a:Number=1,px:Number=1):void
{
sprite.graphics.clear();
if (lineColor!=0)
{
sprite.graphics.lineStyle(px,lineColor,a);
}
if (bgColor!=0)
{
sprite.graphics.beginFill(bgColor,a);
}
sprite.graphics.drawRect(x, y, w, h);
sprite.graphics.endFill();
} /***
* drawRoundRectComplex 圆角矩形
* @param sprite Sprite对象
* @param x X坐标
* @param y Y坐标
* @param w 宽度
* @param h 高度
* @param radiusTL 左上角圆角半径
* @param radiusTR 右上角圆角半径
* @param radiusBL 左下角圆角半径
* @param radiusBR 右下角圆角半径
* @param bgColor 填充颜色(值为0无填充)
* @param lineColor 边框颜色(值为0无边框)
* @param a 透明度(0-1)
* @param px 边框粗细(px)
***/
public static function drawRoundRectComplex(sprite:Sprite,x:Number,y:Number,w:Number,h:Number,radiusTL:Number=3,radiusTR:Number=8,radiusBL:Number=3,radiusBR:Number=8,bgColor:uint=0xff00ff,lineColor:uint=0,a:Number=1,px:Number=1):void
{
sprite.graphics.clear();
if (lineColor!=0)
{
sprite.graphics.lineStyle(px,lineColor,a);
}
if (bgColor!=0)
{
sprite.graphics.beginFill(bgColor,a);
}
sprite.graphics.drawRoundRectComplex(x, y, w, h,radiusTL,radiusTR,radiusBL,radiusBR);
sprite.graphics.endFill();
} /***
* drawCircle 圆形
* @param sprite Sprite对象
* @param x X坐标
* @param y Y坐标
* @param r 半径
* @param bgColor 填充颜色(值为0无填充)
* @param lineColor 边框颜色(值为0无边框)
* @param a 透明度(0-1)
* @param px 边框粗细(px)
***/
public static function drawCircle(sprite:Sprite,x:Number,y:Number,r:Number,bgColor:uint=0xff00ff,lineColor:uint=0,a:Number=1.0,px:Number=1):void
{
sprite.graphics.clear();
if (lineColor!=0)
{
sprite.graphics.lineStyle(px,lineColor,a);
}
if (bgColor!=0)
{
sprite.graphics.beginFill(bgColor,a);
}
sprite.graphics.drawCircle(x, y, r);
sprite.graphics.endFill();
} /***
* drawEllipse 椭圆
* @param sprite Sprite对象
* @param x X坐标
* @param y Y坐标
* @param w 宽度
* @param h 高度
* @param bgColor 填充颜色(值为0无填充)
* @param lineColor 边框颜色(值为0无边框)
* @param a 透明度(0-1)
* @param px 边框粗细(px)
***/
public static function drawEllipse(sprite:Sprite,x:Number,y:Number,w:Number,h:Number,bgColor:uint=0xff00ff,lineColor:uint=0,a:Number=1.0,px:Number=1):void
{
sprite.graphics.clear();
if (lineColor!=0)
{
sprite.graphics.lineStyle(px,lineColor,a);
}
if (bgColor!=0)
{
sprite.graphics.beginFill(bgColor,a);
}
sprite.graphics.drawEllipse(x, y, w,h);
sprite.graphics.endFill();
} /***
* drawSector 绘制扇形
* @param sprite Sprite对象
* @param x 圆心角x
* @param y 圆心角y
* @param r 半径
* @param angle 绘制角度
* @param startAngle 起始角度
* @param color 填充颜色(值为0无填充)
* @param lineColor 边框颜色(值为0无边框)
* @param a 透明度(0-1)
* @param px 边框粗细(px)
***/
public static function drawSector(sprite:Sprite,x:Number=200,y:Number=200,r:Number=100,angle:Number=90,startAngle:Number=-135,color:uint=0xff0000,lineColor:uint=0,a:Number=1.0,px:Number=1):void
{
sprite.graphics.clear();
if (lineColor!=0)
{
sprite.graphics.lineStyle(px,lineColor,a);
}
if (color!=0)
{
sprite.graphics.beginFill(color,a);
}
sprite.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;
sprite.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);
sprite.graphics.curveTo(bx,by,cx,cy);
}
if ((angle != 360))
{
sprite.graphics.lineTo(x,y);
}
sprite.graphics.endFill();
} /***
* drawStar 多角星
* @param sprite Sprite对象
* @param vertex 顶点 角的个数
* @param radius 半径
* @param color 填充颜色(值为0无填充)
* @param lineColor 边框颜色(值为0无边框)
* @param a 透明度(0-1)
* @param px 边框粗细(px)
***/
public static function drawStar(sprite:Sprite,vertex:int=5,radius:int=100,color:uint=0xff0000,lineColor:uint=0,a:Number=1.0,px:Number=1):void
{
sprite.graphics.clear();
if ((vertex >= 2))
{
sprite.graphics.clear();
if (lineColor!=0)
{
sprite.graphics.lineStyle(px,lineColor,a);
}
if (color!=0)
{
sprite.graphics.beginFill(color,a);
}
//初始点
sprite.graphics.moveTo(radius,0); //循环 vertex*2 需要经过的顶点数;
for (var i:int = 1; i < vertex * 2; i++)
{
//半径
var radius2:Number = radius;
//求模,余数不等于0,这里其实就是奇、偶数的判断
if (i % 2 != 0)
{
//i为奇数的时候半径减半
radius2 = radius / 2;
}
//当前角度
var angle:Number = Math.PI * 2 / (vertex * 2) * i;
//点的坐标(通过角度与半径计算每一个顶点的坐标)
sprite.graphics.lineTo(Math.cos(angle) * radius2,Math.sin(angle) * radius2);
}
//结束画图
sprite.graphics.endFill();
//移动图形坐标;
sprite.x = sprite.y = radius; }
} /***
* drawPolygon 正多边形
* @param sprite Sprite对象
* @param segments 边的个数大于2
* @param radius 半径
* @param color 填充颜色,16进制,为0的时候不填充
* @param line 边线粗细
* @param lineColor 边线颜色,16进制,为0的时候不填充边线
***/
public static function drawPolygon(sprite:Sprite,segments:uint=5,radius:Number=100,color:uint=0xff0000,line:Number=1.0,lineColor:uint=0):void
{
sprite.graphics.clear();
if (segments >= 3)
{
if (lineColor!=0)
{
sprite.graphics.lineStyle(line,lineColor,1);
}
//初始点;
sprite.graphics.moveTo(radius,0);
//填充颜色;
if (color>0)
{
sprite.graphics.beginFill(color);
}
//循环 segments 需要经过的顶点数;
for (var i:int = 1; i < segments; i++)
{
//当前角度
var angle:Number = Math.PI * 2 / segments * i;
//点的坐标(通过角度与半径计算每一个顶点的坐标)
sprite.graphics.lineTo(Math.cos(angle) * radius,Math.sin(angle) * radius);
}
//结束画图
sprite.graphics.endFill();
//移动图形坐标;
sprite.x = sprite.y = radius; }
} /***
* drawTriangle 等边(腰)三角形
* @param sprite Sprite对象
* @param angle 顶角度数<180
* @param r 顶角邻边长度
* @param fillColor 填充颜色,16进制,为0的时候不填充
* @param frameColor 边框颜色,16进制,为0的时候不填充边线
***/
public static function drawTriangle(sprite:Sprite,angle:Number=60,r:Number=100,fillColor:uint=0xff0000,frameColor:uint=0xffff00)
{
sprite.graphics.clear();
var _angle:Number = angle * ((2 * Math.PI) / 360);//这里得到是弧度,即30度对应的弧度数
if (frameColor!=0)
{
sprite.graphics.lineStyle(1,frameColor);
}
if (fillColor!=0)
{
sprite.graphics.beginFill(fillColor);
}
sprite.graphics.moveTo(0,0);
sprite.graphics.lineTo(r,0);
sprite.graphics.lineTo(r * Math.cos(_angle),r * Math.sin(_angle));
sprite.graphics.lineTo(0,0);
sprite.graphics.endFill();
sprite.rotation = (180 - angle) / 2; /*
1、等腰三角形可以看做其两腰交叉的那个点在一个圆的圆心,那么其他两个顶点则在这个圆上,假设圆心坐标为(0,0),圆的半径为r,两腰夹角为Q,可得另个顶点坐标为(r,0),最后个顶点坐标为(r*cosQ,r*sinQ);
2、等边三角形可看做两腰夹角为60度的等腰三角形,只需知道边长,即可按照上面的方法画出 3、如果已知条件为 两腰夹角Q,底边长度d,那么两腰的长度即圆的半径r 为d*Math.PI/(2*Q),再按照上面的方法也可画出; 4、如果知道等腰三角形的腰长r 和底边长d 也可求出;
假设两腰夹角为x ,沿顶点画出等腰三角形的垂直平分线,可看出sin(x/2)=(d/2)/r,可求出夹角Q=(Math.asin((d/2)/r))/2,再按照上面的方法也可画出。
*/
} /***
* drawGradientFill 矩形渐变填充(可扩展其他图形)
* @param sprite Sprite对象
* @param w 宽
* @param h 高
* @param colors 填充颜色数组 [0xff00ff,0xffffff,0xffffff,0xff00ff],也可以2、3...个参数
* @param alphas 对应颜色的透明度0-1 [0,1,1,0]对应填充颜色数组
* @param ratios 对应颜色的偏移0-255 [0,80,160,255]填充颜色数组
* @param direction 渐变类型,默认true(水平渐变),false(垂直渐变)
* @param type 渐变填充,默认true(线性填充),false(放射填充)
***/
public static function drawGradientFill(sprite:Sprite,w:Number,h:Number,colors:Array,alphas:Array,ratios:Array,direction:Boolean=true,type:Boolean=true):void
{
sprite.graphics.clear();
var matrix:Matrix=new Matrix();
if (direction)
{
matrix.createGradientBox(w,h,0,0,0);
}
else
{
matrix.createGradientBox(w,h,Math.PI/2,0,0);
} if (type)
{
sprite.graphics.beginGradientFill(GradientType.LINEAR, colors, alphas, ratios, matrix);
}
else
{
sprite.graphics.beginGradientFill(GradientType.RADIAL, colors, alphas, ratios, matrix);
}
//可扩展其他图形
sprite.graphics.drawRect(0, 0, w,h);
sprite.graphics.endFill();
//圆角矩形(x,y,宽,高,圆角半径)
//graphics.drawRoundRect(0,0,w,h,5);
//圆角矩形(x,y,宽,高,左上角圆角半径,右上角圆角半径,左下角圆角半径,右下角圆角半径)
//graphics.drawRoundRectComplex(0, 0, w,h,8,8,5,5) } } }

  

AS3.0绘图API的更多相关文章

  1. Html5 学习系列(五)Canvas绘图API快速入门(2)

    Canvas绘图API Demos 上一篇文章中,笔者已经给大家演示了怎么快速用Canvas的API绘制一个矩形出来.接下里我会在本文中给各位介绍Canvas的其他API:绘制线条.绘制椭圆.绘制图片 ...

  2. as3.0 interface接口使用方法

    [转]as3.0 interface接口使用方法 AS在2.0的时候就支持接口了 接口能够让你的程序更具扩展性和灵活性,打个例如 比方你定义了一个方法 代码: public function aMet ...

  3. “AS3.0高级动画编程”学习:第三章等角投影(上)

    什么是等角投影(isometric)? 原作者:菩提树下的杨过出处:http://yjmyzz.cnblogs.com 刚接触这个概念时,我也很茫然,百度+google了N天后,找到了一些文章: [转 ...

  4. PyQt5绘图API

    PyQt5绘图API大全1.绘图API:绘制文本#1.文本 2.各种图形 3.图像#QPainter painter=QPainter() painter.begin() painter.end() ...

  5. canvas绘图API详解

    canvas绘图API详解 1.context的状态 矩阵变换属性 当前剪辑区域 context的其他状态属性: strokeStyle, fillStyle, globalAlpha, lineWi ...

  6. [ActionScript 3.0] AS3.0和AS2.0的相互通信

    AS3和AS2之间的通信,最好的方式可能就是LocalConnection了. AS2向AS3发送数据,即AS2调用AS3的函数: as2.0代码(按钮上写的发送信息代码): on (release) ...

  7. ASP.NET CORE 1.0 MVC API 文档用 SWASHBUCKLE SWAGGER实现

    from:https://damienbod.com/2015/12/13/asp-net-5-mvc-6-api-documentation-using-swagger/ 代码生成工具: https ...

  8. Html5 学习系列(五)Canvas绘图API快速入门(1)

    引言:Canvas绘图API快速入门 在接触HTML5的初学者包括我都在很多地方见到非常炫的一些页面,甚至好多学习HTML5的开发者都是冲着Web端的页游去的,那么HTML5那么绚丽的页面效果以及游戏 ...

  9. 转载:Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式

    Flash AS3.0 加载外部资源(图片,MP3,SWF)的两种方式 出自:http://www.cnblogs.com/top5/archive/2012/08/04/2623464.html 关 ...

随机推荐

  1. cube.js 学习(十一)cube + gitbase 分析git 代码

    这个是一个简单的demo,使用gitbase+cube 分析git 仓库代码 需求 我们平时使用的gitlab,或者gogs 等git 仓库管理工具,有自己的管理强项,但是对于分析上可能就不是那么强大 ...

  2. 【大数据作业十】分布式文件系统HDFS 练习

    作业要求来自: https://edu.cnblogs.com/campus/gzcc/GZCC-16SE2/homework/3292 利用Shell命令与HDFS进行交互 以”./bin/dfs ...

  3. mocha单元测试简易教程

    mocha单元测试简易教程 写在前面 其实mocha单元测试的教程网上有很多,也都很简单易懂,但是每个人对同一份的教程也会产生不同的理解,像我这种大概就是走遍了所有弯路才到达终点的人,想通过给大家分享 ...

  4. (二)OpenCV-Python学习—对比度增强

    ·对于部分图像,会出现整体较暗或较亮的情况,这是由于图片的灰度值范围较小,即对比度低.实际应用中,通过绘制图片的灰度直方图,可以很明显的判断图片的灰度值分布,区分其对比度高低.对于对比度较低的图片,可 ...

  5. Maven构建报错问题解决

    [ERROR] Failed to execute goal on project zepeto-admin: Could not resolve dependencies -SNAPSHOT: Fa ...

  6. typescript - 6.泛型

    泛型类 class MinClas<T>{ public list:T[]=[]; add(value:T):void{ this.list.push(value); } min():T{ ...

  7. WebGL学习笔记(五):变换库

    在WebGL开始绘制之前,我们需要通过自己对3D空间进行矩阵和向量的运算,使用网上已经成熟的转换库,可以避免自己去实现这些复杂的数学运算. 我们这里选择的是gl-matrix库,下载地址:https: ...

  8. Docker安装ES和Kibana

    1.ES安装 1.下载ES镜像问题 docker pull elasticsearch 2.运行ES docker run -it --name elasticsearch -d -p 9200:92 ...

  9. Ubuntu / CentOS 安装 Anaconda 并创建虚拟环境

    Anaconda可以很好地帮我们管理Python的虚拟环境,Windows上操作极其方便,现在讲一下 Ubuntu 和 CentOS 上的使用方法 ubuntu 安装Anaconda版本 安装方法一: ...

  10. jsConfig那些事儿

    jsConfig 是为了解决 vscode 的警告. { "compilerOptions": { "experimentalDecorators": true ...