Flash动态生成扇形
来源:互联网 发布:spyder导入mysql包 编辑:程序博客网 时间:2024/04/28 03:32
Flash并没有提供可以直接生成扇形的API。使用curveTo画的也只是贝塞尔曲线,不是圆弧线,
所以只能自己手动用微积分的原理生成了。
////////////////////////////////////////////////////////////////////////////////
//
// GiantJadder@gmail.com
// This class is designed to generate dynamic sectors.
//
////////////////////////////////////////////////////////////////////////////////
package {
import flash.display.Sprite;
import flash.display.Graphics;
public class Sector extends Sprite {
private var innerRadius:Number;
private var outterRadius:Number;
private var angle:Number;
private var startXAngle:Number;
private var quality:int;
private var color:uint;
private var sectorAlpha:Number;
private var n:int;
private var smallAngle:Number;
private var g:Graphics;
public function reDraw(
_innerRadius:Number,
_outterRadius:Number,
_angle:Number,
_startXAngle:Number,
_color:uint,
_alpha:Number,
_quality:int // from 0 ~ 4;
):void{
innerRadius = _innerRadius;
outterRadius = _outterRadius;
angle = _angle;
startXAngle = _startXAngle;
quality = _quality;
color = _color;
sectorAlpha = _alpha;
g = graphics;
g.clear();
n = 20*(quality+1);
smallAngle = angle/n;
var i:int = 0;
g.beginFill(color,sectorAlpha);
g.moveTo( outterRadius*Math.cos( startXAngle), -outterRadius*Math.sin(startXAngle) );
for(i=1;i<=n;i++){
g.lineTo(
outterRadius*Math.cos( startXAngle+i*smallAngle),
-outterRadius*Math.sin( startXAngle+i*smallAngle)
);
}
g.lineTo( innerRadius*Math.cos( startXAngle+angle), -innerRadius*Math.sin(startXAngle+angle) );
for(i=1;i<=n;i++){
g.lineTo(
innerRadius*Math.cos( startXAngle+angle-i*smallAngle),
-innerRadius*Math.sin( startXAngle+angle-i*smallAngle)
);
}
g.endFill();
}
}
}
//
// GiantJadder@gmail.com
// This class is designed to generate dynamic sectors.
//
////////////////////////////////////////////////////////////////////////////////
package {
import flash.display.Sprite;
import flash.display.Graphics;
public class Sector extends Sprite {
private var innerRadius:Number;
private var outterRadius:Number;
private var angle:Number;
private var startXAngle:Number;
private var quality:int;
private var color:uint;
private var sectorAlpha:Number;
private var n:int;
private var smallAngle:Number;
private var g:Graphics;
public function reDraw(
_innerRadius:Number,
_outterRadius:Number,
_angle:Number,
_startXAngle:Number,
_color:uint,
_alpha:Number,
_quality:int // from 0 ~ 4;
):void{
innerRadius = _innerRadius;
outterRadius = _outterRadius;
angle = _angle;
startXAngle = _startXAngle;
quality = _quality;
color = _color;
sectorAlpha = _alpha;
g = graphics;
g.clear();
n = 20*(quality+1);
smallAngle = angle/n;
var i:int = 0;
g.beginFill(color,sectorAlpha);
g.moveTo( outterRadius*Math.cos( startXAngle), -outterRadius*Math.sin(startXAngle) );
for(i=1;i<=n;i++){
g.lineTo(
outterRadius*Math.cos( startXAngle+i*smallAngle),
-outterRadius*Math.sin( startXAngle+i*smallAngle)
);
}
g.lineTo( innerRadius*Math.cos( startXAngle+angle), -innerRadius*Math.sin(startXAngle+angle) );
for(i=1;i<=n;i++){
g.lineTo(
innerRadius*Math.cos( startXAngle+angle-i*smallAngle),
-innerRadius*Math.sin( startXAngle+angle-i*smallAngle)
);
}
g.endFill();
}
}
}
这个类使用上面的Sector来生成一个双层圆环。
package {
import flash.display.MovieClip;
import flash.events.Event;
[SWF(backgroundColor=0xfffff0,width=700,height=700,frameRate=30)]
public class SectorDemo extends MovieClip {
private var innerR:Number = 100;
private var mediateR:Number = 200;
private var outterR:Number = 300;
private var colors:Array = [ 0xffffff*Math.random(),
0xffffff*Math.random(),
0xffffff*Math.random(),
0xffffff*Math.random(),
0xffffff*Math.random()
];
private var innerSectors:Array;
private var outterSectors:Array;
public function SectorDemo() {
addEventListener(Event.ENTER_FRAME,animating);
innerSectors = new Array();
outterSectors = new Array();
var i:int = 0;
for(i=0;i<4;i++){
var innerSector:Sector = new Sector();
addChild(innerSector);
innerSector.x = 350;
innerSector.y = 350;
innerSectors[i] = innerSector;
}
for(i=0;i<4;i++){
var outterSector:Sector = new Sector();
addChild(outterSector);
outterSector.x = 350;
outterSector.y = 350;
outterSectors[i] = outterSector;
}
}
private var angle:Number = 0;
private function animating(e:Event):void{
angle+= 0.01;
var i:int = 0;
for(i=0;i<4;i++){
innerSectors[i].reDraw( innerR,mediateR, Math.PI*0.5, angle+i*Math.PI*0.5,colors[i] ,1.0,4);
}
for(i=0;i<4;i++){
outterSectors[i].reDraw( mediateR,outterR,Math.PI*0.5, -angle+i*Math.PI*0.5+Math.PI*0.25, colors[i] ,1.0,4);
}
}
}
}
import flash.display.MovieClip;
import flash.events.Event;
[SWF(backgroundColor=0xfffff0,width=700,height=700,frameRate=30)]
public class SectorDemo extends MovieClip {
private var innerR:Number = 100;
private var mediateR:Number = 200;
private var outterR:Number = 300;
private var colors:Array = [ 0xffffff*Math.random(),
0xffffff*Math.random(),
0xffffff*Math.random(),
0xffffff*Math.random(),
0xffffff*Math.random()
];
private var innerSectors:Array;
private var outterSectors:Array;
public function SectorDemo() {
addEventListener(Event.ENTER_FRAME,animating);
innerSectors = new Array();
outterSectors = new Array();
var i:int = 0;
for(i=0;i<4;i++){
var innerSector:Sector = new Sector();
addChild(innerSector);
innerSector.x = 350;
innerSector.y = 350;
innerSectors[i] = innerSector;
}
for(i=0;i<4;i++){
var outterSector:Sector = new Sector();
addChild(outterSector);
outterSector.x = 350;
outterSector.y = 350;
outterSectors[i] = outterSector;
}
}
private var angle:Number = 0;
private function animating(e:Event):void{
angle+= 0.01;
var i:int = 0;
for(i=0;i<4;i++){
innerSectors[i].reDraw( innerR,mediateR, Math.PI*0.5, angle+i*Math.PI*0.5,colors[i] ,1.0,4);
}
for(i=0;i<4;i++){
outterSectors[i].reDraw( mediateR,outterR,Math.PI*0.5, -angle+i*Math.PI*0.5+Math.PI*0.25, colors[i] ,1.0,4);
}
}
}
}
- Flash动态生成扇形
- 动态生成Flash网页
- 制作Flash扇形菜单
- Flash与数学:扇形
- Flash+XML生成动态导航菜单代码
- Matlab 生成任意扇形区域
- php生成扇形比例图实例
- .NET 使用 Highcharts生成扇形图 柱形图
- ae开发生成扇形的弧线
- 【Android】动态渐变色的扇形
- 【Echarts】Echarts2.0动态加载扇形图。
- 为php4加入动态flash文件的生成的支持
- 两种扇形束CT投影生成方法
- Echars学习-动态隐藏扇形区域的文字描述。
- flash指生成swf
- flash插件如何生成
- 动态加载加载FLASH.
- 动态调用FLASH幻灯片
- [digest from infocenter ]Java develop MQ application 1
- poj2112——Optimal Milking
- C# 网通短信网关 SGIP
- Shell数据对象(一):数据对象如何工作
- 在Ubuntu 10.04下安装Oracle 11g 第二版
- Flash动态生成扇形
- Verilog液晶显示
- MySQLdb-python无法设置字符集的问题
- vlc-android 移植live555到android
- 尖括号 和百分号里的脚本是什么意思?如
- FreeMarker 的 List 的使用
- boost any 实现技法
- Linq初探——DataTable的查询与修改
- 今天学习c++的指针