flash純動態(tài)生成餅圖第2/2頁
更新時間:2007年03月15日 00:00:00 作者:
所有代碼放到影片的時間軸上的一幀中就可以了。
復制代碼 代碼如下:
/*
mc為影片名。
x0,y0圓心坐標;w1,w2為長短軸;a0為開始度數(shù),a為結束度數(shù),h為高, hw為環(huán)寬,color為十六進制顏色,
movew為移動距離,alpha為透明度(點擊之后),mcalpha為原始透明度,movenow為確定默認載入時是否移動出去,
valuepercent為百分比值,arr_name為每項名稱,arr_showname確定是否顯示名稱與值,
titleline顯示名稱與值的長短位置,linecolor指示線顏色,linealpha指示線透明度,fontcolor文字顏色,percentshow是否顯示百分比值,dark深色系數(shù)(>1如1.43)
本pie對應豎向排列方塊mc名。
*/
function drawCircle(mc:MovieClip,
x0:Number, y0:Number, w1:Number, w2:Number, a0:Number, a:Number, h:Number, hw:Number, color:Number,
movew:Number, alpha:Number, mcalpha:Number, movenow:String,
valuepercent:Number, arr_name:String, arr_showname:String,
titleline:Number, linecolor:Number,linealpha:Number, fontcolor:Number,percentshow:String,dark:Number,
ordermc:MovieClip):Void {
//加減間隔度
step = 1;
//求內長短軸
leichang = w1-hw;
leiduan = w2-(hw*w2/w1);
//深色
hicolor = darkcolor(color,dark);
//---------------------------------
//下面為下面環(huán);
mc.beginFill(color, 100);
//mc.lineStyle(1, color, 100, false, "none");
//外邊
mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
k = a0;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
//側邊1
mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, k).x, getPoint(x0, y0+h, leichang, leiduan, k).y);
//內邊
while (k>a0) {
k -= step;
mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, k).x, getPoint(x0, y0+h, leichang, leiduan, k).y);
}
//側邊2
mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, a0).x, getPoint(x0, y0+h, leichang, leiduan, a0).y);
mc.endFill();
//--------------------------------
//下邊高
//下邊外側邊高
if(a0<=0 && a>=0 && a<=180){
//解決90度時外側面,顯示事實為90度,實際為0度,因為我們整個旋轉了-90度;
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
k=a0;
while (k<0) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, 0).x, getPoint(x0, y0, w1, w2, 0).y);
while (k>a0){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, 0).x, getPoint(x0, y0+h, w1, w2, 0).y);
k=0;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
while (k>0){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
}else if(a>=180 && a0<=180 && a0>=0){
//解決180度時外側面,顯示事實為270度,實際為180度,因為我們整個旋轉了-90度;
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
k=a0;
while (k<180) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, 180).x, getPoint(x0, y0, w1, w2, 180).y);
while (k>a0){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, 180).x, getPoint(x0, y0+h, w1, w2, 180).y);
k=180;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
while (k>180){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
}else if(a0<=0 && a>=180){
//解決同時處于0度和180度的情況
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
k=a0;
while (k<0) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, 0).x, getPoint(x0, y0, w1, w2, 0).y);
while (k>a0){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, 0).x, getPoint(x0, y0+h, w1, w2, 0).y);
k=0;
while (k<180) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, 180).x, getPoint(x0, y0, w1, w2, 180).y);
while (k>0){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, 180).x, getPoint(x0, y0+h, w1, w2, 180).y);
k=180;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
while (k>180){
k -=step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
}else{
mc.beginFill(hicolor, 100);
mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
k = a0;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
}
//mc.lineTo(getPoint(x0, y0+h, w1, w2, a).x, getPoint(x0, y0+h, w1, w2, a).y);
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
while (k>a0) {
k -= step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
mc.endFill();
}
//下邊開始側面高
mc.beginFill(hicolor, 100);
//mc.lineStyle(1, hicolor, 100, false, "none");
mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, a0).x, getPoint(x0, y0+h, leichang, leiduan, a0).y);
mc.lineTo(getPoint(x0, y0, leichang, leiduan, a0).x, getPoint(x0, y0, leichang, leiduan, a0).y);
mc.lineTo(getPoint(x0, y0, w1, w2, a0).x, getPoint(x0, y0, w1, w2, a0).y);
mc.endFill();
//下面結束側面高
mc.beginFill(hicolor, 100);
//mc.lineStyle(1, hicolor, 100, false, "none");
mc.moveTo(getPoint(x0, y0+h, w1, w2, a).x, getPoint(x0, y0+h, w1, w2, a).y);
mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, a).x, getPoint(x0, y0+h, leichang, leiduan, a).y);
mc.lineTo(getPoint(x0, y0, leichang, leiduan, a).x, getPoint(x0, y0, leichang, leiduan, a).y);
mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
mc.endFill();
//下面內側面高
mc.beginFill(hicolor, 100);
//mc.lineStyle(1, hicolor, 100, false, "none");
mc.moveTo(getPoint(x0, y0+h, leichang, leiduan, a0).x, getPoint(x0, y0+h, leichang, leiduan, a0).y);
k = a0;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, k).x, getPoint(x0, y0+h, leichang, leiduan, k).y);
}
mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
while (k>a0) {
k -= step;
mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
}
mc.endFill();
//---------------------------------
//下面為上面環(huán);
mc.beginFill(color, 100);
//mc.lineStyle(1, color, 100, false, "none");
//外邊
mc.moveTo(getPoint(x0, y0, w1, w2, a0).x, getPoint(x0, y0, w1, w2, a0).y);
k = a0;
while (k<a) {
k += step;
mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
}
//側邊1
mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
//內邊
while (k>a0) {
k -= step;
mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
}
//側邊2
mc.lineTo(getPoint(x0, y0, leichang, leiduan, a0).x, getPoint(x0, y0, leichang, leiduan, a0).y);
mc.endFill();
//--------------------------------------顯示名稱與值
if(arr_showname=="true"){
mc.beginFill(color, 100);
mc.lineStyle(1, linecolor, linealpha);
mc.moveTo(getPoint(x0, y0, w1, w2, a0+(a-a0)/2).x,getPoint(x0, y0, w1, w2, a0+(a-a0)/2).y);
mc.lineTo(getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x,getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y);
mc.endFill();
//trace(mc._name+":"+(a0+(a-a0)/2));
if(a0+(a-a0)/2>0 && a0+(a-a0)/2<90){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y, 0, 0);
label.autoSize = "left";
}else if(a0+(a-a0)/2>90 && a0+(a-a0)/2<180){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y, 0, 0);
label.autoSize = "right";
}else if(a0+(a-a0)/2>180 && a0+(a-a0)/2<270){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y-18, 0, 0);
label.autoSize = "right";
}else if(a0+(a-a0)/2>-90 && a0+(a-a0)/2<0){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y-18, 0, 0);
label.autoSize = "left";
}else if(a0+(a-a0)/2==0){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y-9, 0, 0);
label.autoSize = "left";
}else if(a0+(a-a0)/2==90){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y, 0, 0);
label.autoSize = "center";
}else if(a0+(a-a0)/2==180){
var label:TextField = mc.createTextField("label", 1, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).x, getPoint(x0, y0, w1+titleline, w2+(w2*titleline)/w1, a0+(a-a0)/2).y-9, 0, 0);
label.autoSize = "right";
}
label.html = true;
if(percentshow=="all"){
label.htmlText = arr_name+":"+valuepercent+"%";
}else if(percentshow=="font"){
label.htmlText = arr_name;
}else if(percentshow=="num"){
label.htmlText = valuepercent+"%";
}
var myformat:TextFormat = new TextFormat();
myformat.font = "Verdana";
myformat.size = 12;
myformat.color = fontcolor;
label.setTextFormat(myformat);
label.gridFitType = "pixel";
label.antiAliasType = "advanced";
label.sharpness = -400;
}
//--------------------------------------
//點擊移動
mc.onRelease = function(){
//移動方向:度數(shù):
go_a = a0+(a-a0)/2;
//移動距離
go_w = movew;
//trace(this._name);
//trace(this.enabled);
if(mc._x!=0 || mc._y!=0){
myTweeen3=new Tween(mc,"_x",Bounce.easeOut,mc._x,(mc._x - (getPoint(x0,y0,go_w,go_w,go_a).x-x0)),1.5,true);
myTweeen4=new Tween(mc,"_y",Bounce.easeOut,mc._y,(mc._x - (getPoint(x0,y0,go_w,go_w,go_a).x-x0)),1.5,true);
//透明度
myTweeenalpha2=new Tween(mc,"_alpha",Regular.easeOut,mc._alpha,mcalpha,1,true);
var listener3:Object = new Object();
mc.enabled = false;
ordermc.enabled = false;//豎向排列本pie對應的方塊mc
listener3.onMotionFinished = function(){
mc.enabled = true;
ordermc.enabled = true;//豎向排列本pie對應的方塊mc
}
myTweeen3.addListener(listener3);
//mc._x = mc._x - (getPoint(x0,y0,go_w,go_w,go_a).x-x0);
//mc._y = mc._y - (getPoint(x0,y0,go_w,go_w,go_a).y-y0);
}else{
//到達新點
myTweeen1=new Tween(mc,"_x",Regular.easeOut,mc._x,(getPoint(x0,y0,go_w,go_w,go_a).x-x0),1,true);
myTweeen2=new Tween(mc,"_y",Regular.easeOut,mc._y,(getPoint(x0,y0,go_w,go_w,go_a).y-y0),1,true);
//透明度
myTweeenalpha=new Tween(mc,"_alpha",Regular.easeOut,mc._alpha,alpha,1,true);
var listener1:Object = new Object();
mc.enabled = false;
ordermc.enabled = false;//豎向排列本pie對應的方塊mc
listener1.onMotionFinished = function(){
mc.enabled = true;
ordermc.enabled = true;//豎向排列本pie對應的方塊mc
}
myTweeen1.addListener(listener1);
}
//trace(this.getDepth());
}
//默認位置(移動)
if(movenow=="true"){
//移動方向:度數(shù):
go_a = a0+(a-a0)/2;
//移動距離
go_w = movew;
myTweeen5=new Tween(mc,"_x",Regular.easeOut,mc._x,(getPoint(x0,y0,go_w,go_w,go_a).x-x0),1,true);
myTweeen6=new Tween(mc,"_y",Regular.easeOut,mc._y,(getPoint(x0,y0,go_w,go_w,go_a).y-y0),1,true);
//透明度
myTweeenalpha=new Tween(mc,"_alpha",Regular.easeOut,mc._alpha,alpha,1,true);
var listener5:Object = new Object();
mc.enabled = false;
ordermc.enabled = false;//豎向排列本pie對應的方塊mc
listener5.onMotionFinished = function(){
mc.enabled = true;
ordermc.enabled = true;//豎向排列本pie對應的方塊mc
}
myTweeen5.addListener(listener5);
}
}
/*--------------------------------------------------------------------------------------------
x=a*cosX //x、y是橢圓上一點的坐標;a、b分別是長、短軸
y=b*sinX //X是橢圓旋轉的角度。
計算橢圓上點的位置函數(shù),x0,y0為圓心;w,h為長短軸;a為度數(shù)。返回一個坐標對象,有x和y兩個屬性。
*/
function getPoint(x0:Number, y0:Number, w:Number, h:Number, a:Number):Object {
a = a*Math.PI/180;
return {x:Math.cos(a)*w+x0, y:Math.sin(a)*h+y0};
}
//--------------------------------------------------------------------------------------
/*--------------------------------------------------------------------------------------------
將顏色加深
原有顏色oldcolor為十六進表示法如:0xff6600;返回同樣類型的值
*/
function darkcolor(oldcolor:Number,dark:Number):Number{
//求暗色
if(oldcolor.toString(16).length<6){//防止這個十六進制數(shù)的第一位為0;
r = parseInt("0x0"+substring(oldcolor.toString(16), 0, 1));
g = parseInt("0x"+substring(oldcolor.toString(16), 2, 2));
b = parseInt("0x"+substring(oldcolor.toString(16), 4, 2));
}else{
r = parseInt("0x"+substring(oldcolor.toString(16), 0, 2));
g = parseInt("0x"+substring(oldcolor.toString(16), 3, 2));
b = parseInt("0x"+substring(oldcolor.toString(16), 5, 2));
}
//trace("原始rgb:"+r+":"+g+":"+b);
//dark = 1.43;
r=Math.round(r/dark).toString(16);
g=Math.round(g/dark).toString(16);
b=Math.round(b/dark).toString(16);
//trace("新rgb:"+r+":"+g+":"+b);
r.length==1 ? r="0"+r:r;
g.length==1 ? g="0"+g:g;
b.length==1 ? b="0"+b:b;
var hicolor:Number;
hicolor = parseInt("0x"+r.toString(16)+""+g.toString(16)+""+b.toString(16));
r = parseInt("0x"+substring(hicolor.toString(16), 0, 2));
g = parseInt("0x"+substring(hicolor.toString(16), 3, 2));
b = parseInt("0x"+substring(hicolor.toString(16), 5, 2));
return hicolor;
}

本地下載this.alt='點擊在新窗口查看全圖\nCTRL+鼠標滾輪放大或縮小';}" border=0>
本地下載
相關文章
AS3.0實例學習 熟悉新的事件機制和addChild的運用
AS3.0實例學習 熟悉新的事件機制和addChild的運用...2007-12-12完整簡潔 Flash 處理XML 文檔數(shù)據(jù) 教程 下篇
完整簡潔 Flash 處理XML 文檔數(shù)據(jù) 教程 下篇...2007-12-12使用 AllowNetworking Flash的世界安靜了
使用 AllowNetworking Flash的世界安靜了...2007-03-03