用FLASH畫超炫3D立體餅圖_第1頁
用FLASH畫超炫3D立體餅圖_第2頁
用FLASH畫超炫3D立體餅圖_第3頁
用FLASH畫超炫3D立體餅圖_第4頁
用FLASH畫超炫3D立體餅圖_第5頁
已閱讀5頁,還剩10頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、用FLASH畫3D立體餅圖先看效果圖:方法如下:新建一FLASH文檔,在第一個空白關鍵幀粘貼以下代碼即可(100%如效果圖所示):修改數(shù)據(jù):找到var pie_num:String = "20,15,8,50,55,100,100,190"這一行可以修改數(shù)據(jù)。修改標注名稱:找到var pie_name:String = "四川,重慶,云南,貴州,山西,湖南,上海,北京,廣州"這一行可以修改標注。Stage.align = "TL"Stage.scaleMode = "noScale"_quality = "

2、;BEST"import mx.transitions.Tween;import mx.transitions.easing.*;/全局/所有數(shù)據(jù)var pie_num:String = "20,15,8,50,55,100,100,190"/所有數(shù)據(jù)名稱var pie_name:String = "四川,重慶,云南,貴州,山西,湖南,上海,北京,廣州"/是否顯示數(shù)據(jù)名稱與百分比值var show_name:String = "true,false,false,true,false,true,true,true"/所有顏色v

3、ar colorstr:String = "0xFF0F00,0xFF6600,0xFF9E01,0xFCD202,0xF8FF01,0xB0DE09,0x04D215,0x0D8ECF,0xFF1F11"/所有開始位置var defaultsate:String = "false,false,false,false,false,false,false,true"/公共變量x0 = 210;/圓點坐標x(數(shù)字)y0 = 135;/圓點坐標y(數(shù)字)z = 150;/圓長軸(>0)d = 90;/圓短軸(>0)w = 150;/環(huán)寬(>0

4、,<長軸)h = 20;/餅高(>=0)movew = 15;/移動距離(>0)alpha = 100;/點擊之后的透明度(0-100)mcalpha = 100;/默認所有開始透明度(0-100)showorder = true;/是否顯示豎向排列表(true,false)orderx = 400;/豎向排列表起始x(數(shù)字)ordery = 70;/豎向排列表起始y(數(shù)字)orderxy = 6;/豎向排列表豎向間隔(>0)linecolor = 0xcccccc;/指示線顏色(十六進制顏色)linealpha = 100;/指示線透明度(0-100)titlelin

5、e = 20; /指示線長度(>0 | 0<)fontcolor = 0xFF0000;/文字顏色(十六進制顏色)percentshow = "font"/是否顯示百分值四個值(font文字,num百分值,all都顯示,none不顯)orderfontcolor = 0x222222;/左邊豎向排列文字顏色(十六進制顏色)dark = 1.43;/深色系數(shù)(>1如1.43默認)/以下為三個餅圖示例/第一個參數(shù)為影片名,第二個為深度群drawpie("amu",1, pie_num,pie_name,titleline,linecolor

6、,linealpha,orderfontcolor,percentshow,fontcolor,colorstr,defaultsate,show_name, x0,y0,z,d,w,h,movew,alpha,mcalpha,dark, showorder,orderx,ordery,orderxy);drawpie("vapr",2, "15,30,60,90","<b>好</b>,不好,一般,差,太差了",0,0xcccccc,0,0x000000,"all",0x666666,&qu

7、ot;0x0D8ECF,0x04D215,0xB0DE09,0xF8FF01,0xFF9E01,0xFF6600,0xFF1F11","true,true,false,false","true,true,true,false", 160,380,70,70,50,2,15,100,100,1.5, true,20,340,13);drawpie("kiss",3, "30,50,290,70,50,10","Flash,Html,Javascript,Asp,PHP,C#",10,0x

8、999999,100,0x000000,"none",0xff6600,"0x0D8ECF,0x04D215,0xB0DE09,0xF8FF01,0xFF9E01,0xFF6600,0xFF1F11","false,false,false,false,false,false,false","false,false,false,false,false,false,false", 470,300,100,60,60,20,15,50,100,1.15, false,280,250,28);drawpie("k

9、isss",4, "242,332,171,116,106,224","Flash,Html,Javascript,Asp,PHP,C#",10,0x999999,100,0x000000,"all",0xff6600,"0x0D8ECF,0x04D215,0xB0DE09,0xF8FF01,0xFF9E01,0xFF6600,0xFF1F11","false,false,false,false,false,false,false","true,true,true,true,

10、true,true,true", 370,520,60,40,40,10,15,50,100,1.15, true,515,480,3);function drawpie(mcname:String, depth:Number, pie_num:String, pie_name:String, titleline:Number, linecolor:Number,linealpha:Number, orderfontcolor:Number,percentshow:String, fontcolor:Number, colorstr:String, defaultsate:Strin

11、g, show_name:String, x0:Number, y0:Number, z:Number, d:Number, w:Number, h:Number, movew:Number, alpha:Number, mcalpha:Number, dark:Number, showorder:Boolean, orderx:Number, ordery:Number, orderxy:Number):Voidarr_n = pie_num.split(",");arr_total=0;for(m=0;m<arr_n.length;m+) arr_total+=N

12、umber(arr_nm);var arr_name = new Array();arr_name = pie_name.split(",");var arr_showname = new Array();arr_showname = show_name.split(",");var arr_num = new Array();var arr_percent = new Array();duof = 0;for(m=0;m<arr_n.length;m+) if(m=arr_n.length-1) duo = 360-duof; arr_numm=

13、 duo.toString(); else duo = Math.round(Number(arr_nm)*360)/arr_total); duof = duof+duo; arr_numm= duo.toString(); arr_percentm = Math.round(Number(arr_nm)*100)/arr_total*100)/100;/分割數(shù)據(jù)var arr_color = colorstr.split(",");var arr_defaultstate = defaultsate.split(",");/所有扇環(huán)的中間度var a

14、rr_middle:Array = new Array();/生成所有的扇環(huán)的中間度,用來確定深度var xx:Number=-90;var arr_a:Array = new Array();/記錄每一扇環(huán)的開始度與結束度for(m=0; m<arr_num.length;m+) a0=xx; a=Number(a0)+Number(arr_numm); arr_a.push(a0,a); xx=a; if(a-a0>180) arr_middlem = 0.001; else if(a-a0)/2+a0<=180 && (a-a0)/2+a0>=0)

15、 /本mc的中間角度與90度的差值(這兒我們確定誰與90度差值的絕對值最小就排在最前面) arr_middlem = Math.abs(90-(a-a0)/2+a0); else if(a-a0)/2+a0>180 && (a-a0)/2+a0<=270) arr_middlem = (Math.abs(a-a0)/2+a0-180)+500); /本mc的中間角度與180度的差值(這兒我們確定誰與90度差值的絕對值最大就排在最前面) else if(a-a0)/2+a0>=-90 && (a-a0)/2+a0<0) arr_middle

16、m = (Math.abs(a-a0)/2+a0-360)+500); /本mc的中間角度與270度的差值(這兒我們確定誰與90度差值的絕對值最大就排在最前面) /trace(m+":"+arr_middlem);/trace(arr_a00);/扇環(huán)排序arr_middle = arr_middle.sort(Array.NUMERIC|Array.RETURNINDEXEDARRAY);/重排序,讓原來的數(shù)組值從小到大排列,但數(shù)組的索引不變。/arr_middle.reverse();/for(m = 0; m<arr_middle.length; m+) /繪出

17、豎向方塊鏈接- if(showorder) _root.createEmptyMovieClip(mcname+arr_middlem+"icon_mc",(5-m)*22+depth*10+1); mc = thismcname+arr_middlem+"icon_mc" color = parseInt(arr_colorarr_middlem); beginx = orderx; beginy = ordery; jianxy = orderxy+12; mc.beginFill(color, 100); mc.lineStyle(1, darkc

18、olor(color,dark), 100, true, "none"); mc.moveTo(beginx,arr_middlem*jianxy+beginy); mc.lineTo(beginx+12,arr_middlem*jianxy+beginy); mc.lineTo(beginx+12,arr_middlem*jianxy+beginy+12); mc.lineTo(beginx,arr_middlem*jianxy+beginy+12); mc.endFill(); var label:TextField = mc.createTextField("

19、;label", 1, beginx+16, arr_middlem*jianxy+beginy-3, 0, 0); label.html = true; label.autoSize = "left" label.htmlText = arr_namearr_middlem; var myformat:TextFormat = new TextFormat(); myformat.font = "Verdana" myformat.size = 12; myformat.color = orderfontcolor; label.setTex

20、tFormat(myformat); /- _root.createEmptyMovieClip(mcname+arr_middlem+"_mc",(5-m)*22+depth*10); /當前m應算為arr_middlem; drawCircle(thismcname+arr_middlem+"_mc", x0, y0, z, d, arr_aarr_middlem0, arr_aarr_middlem1, h, w, parseInt(arr_colorarr_middlem), movew,alpha,mcalpha,arr_defaultstat

21、earr_middlem, arr_percentarr_middlem,arr_namearr_middlem,arr_shownamearr_middlem, titleline,linecolor,linealpha,fontcolor,percentshow,dark, thismcname+arr_middlem+"icon_mc"); thismcname+arr_middlem+"_mc"._alpha=mcalpha; /- /讓點擊豎向排列時的效果和點擊pie時一樣。 if(showorder) mc.onRelease = thism

22、cname+arr_middlem+"_mc".onRelease; /*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文字顏色,per

23、centshow是否顯示百分比值,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:

24、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,

25、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+

26、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

27、<=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)

28、.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;

29、 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&g

30、t;=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

31、, 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, w

32、2, 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.en

33、dFill(); 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

34、(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 +=

35、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);

36、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

37、(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);

38、 /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

39、); /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, getPoin

40、t(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.

41、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(h

42、icolor, 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)

43、.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, 10

44、0, 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, l

45、eiduan, 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")

46、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)

47、.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, a

48、0+(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

49、+(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, a

50、0+(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*

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論