请选择 进入手机版 | 继续访问电脑版
收藏本站腾讯微博新浪微博
点点网模板设计大赛 phpchina

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 用悬赏 三天解决问题 解决访问速度慢 论坛支持农历生日 - 给官方提建议

论坛活动及任务 归纳网站最新活动 地图任务 邮件更新任务:保护帐号安全

积分换实物,来参加蓝色理想积分兑换吧! 联系招聘客服 蓝色理想帮你找工作! 万元奖励等你拿——点点网模板设计大赛

查看: 39237|回复: 75

[服务器端交互] 做了个flash纯动态生成饼图[2007-3-14更新增加xml配置文件,可下载] [复制链接]

amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-13 13:52:58 |显示全部楼层
先发效果,效果有参考一下国外的饼图,不过他的代码,注释等我也看不懂,英文不懂,所以我就写个中文的好了。大家完全可以根据我的代码改出更多的效果来。
编程水平有限,大家谅解一下,不过能正常运行。


http://www.yes028.com/amu/ok.swf


增加了xml配置文件,可以直接修改xml文件以达到直接使用的目的。


默认数据来源为piedata.xml但是可以在页面中修改这个数据来源。
如下:
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="600" height="600">
  <param name="movie" value="ok.swf?piedata=piedata.asp" />
  <param name="quality" value="high" />
  <embed src="ok.swf?piedata=piedata.asp" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="600" height="600"></embed>
</object>

在代码中swf文件名后加上参数?piedata=piedata.asp则可以修改数据来源为piedata.asp。


代码一次发不下,下面回贴再发。


  1. //缩放舞台并不缩放内容,将内容定位于舞台的左上角;
  2. Stage.align  = "TL";
  3. Stage.scaleMode = "noScale";
  4. _quality = "BEST";


  5. import mx.transitions.Tween;
  6. import mx.transitions.easing.*;


  7. //全局
  8. //所有数据
  9. var pie_num:String = "20,15,8,50,55,100,100,190";
  10. //所有数据名称
  11. var pie_name:String = "四川,重庆,云南,贵州,山西,湖南,上海,北京,广州";
  12. //是否显示数据名称与百分比值
  13. var show_name:String = "true,false,false,true,false,true,true,true"
  14. //所有颜色
  15. var colorstr:String = "0xFF0F00,0xFF6600,0xFF9E01,0xFCD202,0xF8FF01,0xB0DE09,0x04D215,0x0D8ECF,0xFF1F11";
  16. //所有开始位置
  17. var defaultsate:String = "false,false,false,false,false,false,false,true";
  18. //公共变量
  19. x0 = 210;//圆点坐标x(数字)
  20. y0 = 135;//圆点坐标y(数字)
  21. z = 150;//圆长轴(>0)
  22. d = 90;//圆短轴(>0)
  23. w = 150;//环宽(>0,<长轴)
  24. h = 20;//饼高(>=0)
  25. movew = 15;//移动距离(>0)
  26. alpha = 100;//点击之后的透明度(0-100)
  27. mcalpha = 100;//默认所有开始透明度(0-100)
  28. showorder = true;//是否显示竖向排列表(true,false)
  29. orderx = 400;//竖向排列表起始x(数字)
  30. ordery = 70;//竖向排列表起始y(数字)
  31. orderxy = 6;//竖向排列表竖向间隔(>0)
  32. linecolor = 0xcccccc;//指示线颜色(十六进制颜色)
  33. linealpha = 100;//指示线透明度(0-100)
  34. titleline = 20; //指示线长度(>0 || 0<)
  35. fontcolor = 0xFF0000;//文字颜色(十六进制颜色)
  36. percentshow = "font";//是否显示百分值四个值(font文字,num百分值,all都显示,none不显)
  37. orderfontcolor = 0x222222;//左边竖向排列文字颜色(十六进制颜色)
  38. dark = 1.43;//深色系数(>1如1.43默认)

  39. //以下为三个饼图示例
  40. //第一个参数为影片名,第二个为深度群

  41. drawpie("amu",1,
  42.                 pie_num,pie_name,titleline,linecolor,linealpha,orderfontcolor,percentshow,fontcolor,colorstr,defaultsate,show_name,
  43.                 x0,y0,z,d,w,h,movew,alpha,mcalpha,dark,
  44.                 showorder,orderx,ordery,orderxy);

  45. drawpie("vapr",2,
  46.                 "15,30,60,90","<b>好</b>,不好,一般,差,太差了",0,0xcccccc,0,0x000000,"all",0x666666,"0x0D8ECF,0x04D215,0xB0DE09,0xF8FF01,0xFF9E01,0xFF6600,0xFF1F11","true,true,false,false","true,true,true,false",
  47.                 160,380,70,70,50,2,15,100,100,1.5,
  48.                 true,20,340,13);
  49. drawpie("kiss",3,
  50.                 "30,50,290,70,50,10","Flash,Html,Javascript,Asp,PHP,C#",10,0x999999,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",
  51.                 470,300,100,60,60,20,15,50,100,1.15,
  52.                 false,280,250,28);
  53. drawpie("kisss",4,
  54.                 "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,true,true,true",
  55.                 370,520,60,40,40,10,15,50,100,1.15,
  56.                 true,515,480,3);


  57. function drawpie(mcname:String, depth:Number,
  58.                                  pie_num:String, pie_name:String, titleline:Number, linecolor:Number,linealpha:Number, orderfontcolor:Number,percentshow:String, fontcolor:Number, colorstr:String, defaultsate:String, show_name:String,
  59.                                  x0:Number, y0:Number, z:Number, d:Number, w:Number, h:Number, movew:Number, alpha:Number, mcalpha:Number, dark:Number,
  60.                                  showorder:Boolean, orderx:Number, ordery:Number, orderxy:Number):Void{
  61. arr_n = pie_num.split(",");
  62. arr_total=0;
  63. for(m=0;m<arr_n.length;m++){
  64.         arr_total+=Number(arr_n[m]);
  65. }

  66. var arr_name = new Array();
  67. arr_name = pie_name.split(",");

  68. var arr_showname = new Array();
  69. arr_showname = show_name.split(",");

  70. var arr_num = new Array();
  71. var arr_percent = new Array();
  72. duof = 0;
  73. for(m=0;m<arr_n.length;m++){
  74.         if(m==arr_n.length-1){
  75.                 duo = 360-duof;
  76.                 arr_num[m]= duo.toString();
  77.         }else{
  78.                 duo = Math.round((Number(arr_n[m])*360)/arr_total);
  79.                 duof = duof+duo;
  80.                 arr_num[m]= duo.toString();
  81.         }
  82.         arr_percent[m] = Math.round((Number(arr_n[m])*100)/arr_total*100)/100;
  83. }

  84. //分割数据
  85. var arr_color = colorstr.split(",");
  86. var arr_defaultstate = defaultsate.split(",");

  87. //所有扇环的中间度
  88. var arr_middle:Array = new Array();
  89. //生成所有的扇环的中间度,用来确定深度
  90. var xx:Number=-90;
  91. var arr_a:Array = new Array();//记录每一扇环的开始度与结束度
  92. for(m=0; m<arr_num.length;m++){               
  93.         a0=xx;
  94.         a=Number(a0)+Number(arr_num[m]);
  95.        
  96.         arr_a.push([a0,a]);       
  97.         xx=a;
  98.         if(a-a0>180){
  99.                 arr_middle[m] = 0.001;
  100.         }else{
  101.                 if((a-a0)/2+a0<=180 && (a-a0)/2+a0>=0){
  102.                         //本mc的中间角度与90度的差值(这儿我们确定谁与90度差值的绝对值最小就排在最前面)
  103.                         arr_middle[m] = Math.abs(90-((a-a0)/2+a0));
  104.                 }else if((a-a0)/2+a0>180 && (a-a0)/2+a0<=270){
  105.                         arr_middle[m] = (Math.abs((a-a0)/2+a0-180)+500);
  106.                         //本mc的中间角度与180度的差值(这儿我们确定谁与90度差值的绝对值最大就排在最前面)
  107.                 }else if((a-a0)/2+a0>=-90 && (a-a0)/2+a0<0){
  108.                         arr_middle[m] = (Math.abs((a-a0)/2+a0-360)+500);
  109.                         //本mc的中间角度与270度的差值(这儿我们确定谁与90度差值的绝对值最大就排在最前面)
  110.                 }
  111.         }
  112.         //trace(m+":"+arr_middle[m]);
  113. }
  114. //trace(arr_a[0][0]);
  115. //扇环排序
  116. arr_middle = arr_middle.sort(Array.NUMERIC|Array.RETURNINDEXEDARRAY);//重排序,让原来的数组值从小到大排列,但数组的索引不变。
  117. //arr_middle.reverse();
  118. //
  119. for(m = 0; m<arr_middle.length; m++){
  120.         //绘出竖向方块链接------------------------------------------------------------------------
  121.         if(showorder){
  122.         _root.createEmptyMovieClip(mcname+arr_middle[m]+"icon_mc",(5-m)*22+depth*10+1);
  123.        
  124.         mc = this[mcname+arr_middle[m]+"icon_mc"];
  125.         color = parseInt(arr_color[arr_middle[m]]);
  126.         beginx = orderx;
  127.         beginy = ordery;
  128.         jianxy = orderxy+12;
  129.        
  130.         mc.beginFill(color, 100);
  131.         mc.lineStyle(1, darkcolor(color,dark), 100, true, "none");
  132.         mc.moveTo(beginx,arr_middle[m]*jianxy+beginy);
  133.         mc.lineTo(beginx+12,arr_middle[m]*jianxy+beginy);
  134.         mc.lineTo(beginx+12,arr_middle[m]*jianxy+beginy+12);
  135.         mc.lineTo(beginx,arr_middle[m]*jianxy+beginy+12);
  136.         mc.endFill();
  137.        
  138.         var label:TextField = mc.createTextField("label", 1, beginx+16, arr_middle[m]*jianxy+beginy-3, 0, 0);
  139.         label.html = true;
  140.         label.autoSize = "left";
  141.         label.htmlText = arr_name[arr_middle[m]];
  142.        
  143.         var myformat:TextFormat = new TextFormat();
  144.         myformat.font = "Verdana";
  145.         myformat.size = 12;
  146.         myformat.color = orderfontcolor;
  147.         label.setTextFormat(myformat);
  148.         }
  149.         //---------------------------------------------------------------------
  150.        
  151.         _root.createEmptyMovieClip(mcname+arr_middle[m]+"_mc",(5-m)*22+depth*10);
  152.         //当前m应算为arr_middle[m];
  153.         drawCircle(this[mcname+arr_middle[m]+"_mc"],
  154.                                 x0, y0, z, d, arr_a[arr_middle[m]][0], arr_a[arr_middle[m]][1], h, w, parseInt(arr_color[arr_middle[m]]),
  155.                                 movew,alpha,mcalpha,arr_defaultstate[arr_middle[m]],
  156.                                 arr_percent[arr_middle[m]],arr_name[arr_middle[m]],arr_showname[arr_middle[m]],
  157.                                 titleline,linecolor,linealpha,fontcolor,percentshow,dark,
  158.                                 this[mcname+arr_middle[m]+"icon_mc"]);
  159.         this[mcname+arr_middle[m]+"_mc"]._alpha=mcalpha;       
  160.        
  161.         //---------------------------------------------------------------------
  162.         //让点击竖向排列时的效果和点击pie时一样。
  163.         if(showorder){
  164.         mc.onRelease = this[mcname+arr_middle[m]+"_mc"].onRelease;
  165.         }
  166. }
  167. }
复制代码

[ 本帖最后由 amu945 于 2007-3-14 13:40 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11
西部数码顶级域名注册商39元抢注!
amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-13 13:54:34 |显示全部楼层
所有代码放到影片的时间轴上的一帧中就可以了。

  1. /*
  2. mc为影片名。
  3. x0,y0圆心坐标;w1,w2为长短轴;a0为开始度数,a为结束度数,h为高, hw为环宽,color为十六进制颜色,
  4. movew为移动距离,alpha为透明度(点击之后),mcalpha为原始透明度,movenow为确定默认载入时是否移动出去,
  5. valuepercent为百分比值,arr_name为每项名称,arr_showname确定是否显示名称与值,
  6. titleline显示名称与值的长短位置,linecolor指示线颜色,linealpha指示线透明度,fontcolor文字颜色,percentshow是否显示百分比值,dark深色系数(>1如1.43)
  7. 本pie对应竖向排列方块mc名。
  8. */
  9. function drawCircle(mc:MovieClip,
  10.                                         x0:Number, y0:Number, w1:Number, w2:Number, a0:Number, a:Number, h:Number, hw:Number, color:Number,
  11.                                         movew:Number, alpha:Number, mcalpha:Number, movenow:String,
  12.                                         valuepercent:Number, arr_name:String, arr_showname:String,
  13.                                         titleline:Number, linecolor:Number,linealpha:Number, fontcolor:Number,percentshow:String,dark:Number,
  14.                                         ordermc:MovieClip):Void {
  15.         //加减间隔度
  16.         step = 1;
  17.         //求内长短轴
  18.         leichang = w1-hw;
  19.         leiduan = w2-(hw*w2/w1);
  20.         //深色
  21.         hicolor = darkcolor(color,dark);
  22.         //---------------------------------
  23.         //下面为下面环;
  24.         mc.beginFill(color, 100);
  25.         //mc.lineStyle(1, color, 100, false, "none");
  26.         //外边
  27.         mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
  28.         k = a0;
  29.         while (k<a) {
  30.                 k += step;
  31.                 mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  32.         }
  33.         //侧边1
  34.         mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, k).x, getPoint(x0, y0+h, leichang, leiduan, k).y);
  35.         //内边
  36.         while (k>a0) {
  37.                 k -= step;
  38.                 mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, k).x, getPoint(x0, y0+h, leichang, leiduan, k).y);
  39.         }
  40.         //侧边2
  41.         mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, a0).x, getPoint(x0, y0+h, leichang, leiduan, a0).y);
  42.         mc.endFill();
  43.         //--------------------------------
  44.         //下边高
  45.         //下边外侧边高
  46.         if(a0<=0 && a>=0 && a<=180){
  47.                 //解决90度时外侧面,显示事实为90度,实际为0度,因为我们整个旋转了-90度;
  48.                 mc.beginFill(hicolor, 100);
  49.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
  50.                 k=a0;
  51.                 while (k<0) {
  52.                         k += step;
  53.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  54.                 }
  55.                 mc.lineTo(getPoint(x0, y0, w1, w2, 0).x, getPoint(x0, y0, w1, w2, 0).y);
  56.                 while (k>a0){
  57.                         k -=step;
  58.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  59.                 }
  60.                 mc.endFill();
  61.                
  62.                 mc.beginFill(hicolor, 100);
  63.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, 0).x, getPoint(x0, y0+h, w1, w2, 0).y);
  64.                 k=0;
  65.                 while (k<a) {
  66.                         k += step;
  67.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  68.                 }               
  69.                 mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
  70.                 while (k>0){
  71.                         k -=step;
  72.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  73.                 }
  74.                 mc.endFill();
  75.         }else if(a>=180 && a0<=180 && a0>=0){
  76.                 //解决180度时外侧面,显示事实为270度,实际为180度,因为我们整个旋转了-90度;
  77.                 mc.beginFill(hicolor, 100);
  78.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
  79.                 k=a0;
  80.                 while (k<180) {
  81.                         k += step;
  82.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  83.                 }               
  84.                 mc.lineTo(getPoint(x0, y0, w1, w2, 180).x, getPoint(x0, y0, w1, w2, 180).y);
  85.                 while (k>a0){
  86.                         k -=step;
  87.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  88.                 }
  89.                 mc.endFill();
  90.                
  91.                 mc.beginFill(hicolor, 100);
  92.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, 180).x, getPoint(x0, y0+h, w1, w2, 180).y);
  93.                 k=180;
  94.                 while (k<a) {
  95.                         k += step;
  96.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  97.                 }               
  98.                 mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
  99.                 while (k>180){
  100.                         k -=step;
  101.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  102.                 }
  103.                 mc.endFill();
  104.         }else if(a0<=0 && a>=180){
  105.                 //解决同时处于0度和180度的情况
  106.                 mc.beginFill(hicolor, 100);
  107.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
  108.                 k=a0;
  109.                 while (k<0) {
  110.                         k += step;
  111.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  112.                 }
  113.                 mc.lineTo(getPoint(x0, y0, w1, w2, 0).x, getPoint(x0, y0, w1, w2, 0).y);
  114.                 while (k>a0){
  115.                         k -=step;
  116.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  117.                 }
  118.                 mc.endFill();
  119.                
  120.                 mc.beginFill(hicolor, 100);
  121.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, 0).x, getPoint(x0, y0+h, w1, w2, 0).y);
  122.                 k=0;
  123.                 while (k<180) {
  124.                         k += step;
  125.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  126.                 }               
  127.                 mc.lineTo(getPoint(x0, y0, w1, w2, 180).x, getPoint(x0, y0, w1, w2, 180).y);
  128.                 while (k>0){
  129.                         k -=step;
  130.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  131.                 }
  132.                 mc.endFill();
  133.                
  134.                 mc.beginFill(hicolor, 100);
  135.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, 180).x, getPoint(x0, y0+h, w1, w2, 180).y);
  136.                 k=180;
  137.                 while (k<a) {
  138.                         k += step;
  139.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  140.                 }
  141.                 mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
  142.                 while (k>180){
  143.                         k -=step;
  144.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  145.                 }
  146.                 mc.endFill();
  147.         }else{
  148.                 mc.beginFill(hicolor, 100);
  149.                 mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
  150.                 k = a0;
  151.                 while (k<a) {
  152.                         k += step;
  153.                         mc.lineTo(getPoint(x0, y0+h, w1, w2, k).x, getPoint(x0, y0+h, w1, w2, k).y);
  154.                 }
  155.                 //mc.lineTo(getPoint(x0, y0+h, w1, w2, a).x, getPoint(x0, y0+h, w1, w2, a).y);
  156.                
  157.                 mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  158.                 while (k>a0) {
  159.                         k -= step;
  160.                         mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  161.                 }
  162.                 mc.endFill();
  163.         }
  164.         //下边开始侧面高
  165.         mc.beginFill(hicolor, 100);
  166.         //mc.lineStyle(1, hicolor, 100, false, "none");
  167.         mc.moveTo(getPoint(x0, y0+h, w1, w2, a0).x, getPoint(x0, y0+h, w1, w2, a0).y);
  168.         mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, a0).x, getPoint(x0, y0+h, leichang, leiduan, a0).y);
  169.         mc.lineTo(getPoint(x0, y0, leichang, leiduan, a0).x, getPoint(x0, y0, leichang, leiduan, a0).y);
  170.         mc.lineTo(getPoint(x0, y0, w1, w2, a0).x, getPoint(x0, y0, w1, w2, a0).y);
  171.         mc.endFill();
  172.         //下面结束侧面高
  173.         mc.beginFill(hicolor, 100);
  174.         //mc.lineStyle(1, hicolor, 100, false, "none");
  175.         mc.moveTo(getPoint(x0, y0+h, w1, w2, a).x, getPoint(x0, y0+h, w1, w2, a).y);
  176.         mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, a).x, getPoint(x0, y0+h, leichang, leiduan, a).y);
  177.         mc.lineTo(getPoint(x0, y0, leichang, leiduan, a).x, getPoint(x0, y0, leichang, leiduan, a).y);
  178.         mc.lineTo(getPoint(x0, y0, w1, w2, a).x, getPoint(x0, y0, w1, w2, a).y);
  179.         mc.endFill();
  180.         //下面内侧面高
  181.         mc.beginFill(hicolor, 100);
  182.         //mc.lineStyle(1, hicolor, 100, false, "none");
  183.         mc.moveTo(getPoint(x0, y0+h, leichang, leiduan, a0).x, getPoint(x0, y0+h, leichang, leiduan, a0).y);
  184.         k = a0;
  185.         while (k<a) {
  186.                 k += step;
  187.                 mc.lineTo(getPoint(x0, y0+h, leichang, leiduan, k).x, getPoint(x0, y0+h, leichang, leiduan, k).y);
  188.         }
  189.         mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
  190.         while (k>a0) {
  191.                 k -= step;
  192.                 mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
  193.         }
  194.         mc.endFill();
  195.         //---------------------------------
  196.         //下面为上面环;
  197.         mc.beginFill(color, 100);
  198.         //mc.lineStyle(1, color, 100, false, "none");
  199.         //外边
  200.         mc.moveTo(getPoint(x0, y0, w1, w2, a0).x, getPoint(x0, y0, w1, w2, a0).y);
  201.         k = a0;
  202.         while (k<a) {
  203.                 k += step;
  204.                 mc.lineTo(getPoint(x0, y0, w1, w2, k).x, getPoint(x0, y0, w1, w2, k).y);
  205.         }
  206.         //侧边1
  207.         mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
  208.         //内边
  209.         while (k>a0) {
  210.                 k -= step;
  211.                 mc.lineTo(getPoint(x0, y0, leichang, leiduan, k).x, getPoint(x0, y0, leichang, leiduan, k).y);
  212.         }
  213.         //侧边2
  214.         mc.lineTo(getPoint(x0, y0, leichang, leiduan, a0).x, getPoint(x0, y0, leichang, leiduan, a0).y);
  215.         mc.endFill();
  216.        
  217.         //--------------------------------------显示名称与值
  218.         if(arr_showname=="true"){
  219.                 mc.beginFill(color, 100);
  220.                 mc.lineStyle(1, linecolor, linealpha);
  221.                 mc.moveTo(getPoint(x0, y0, w1, w2, a0+(a-a0)/2).x,getPoint(x0, y0, w1, w2, a0+(a-a0)/2).y);
  222.                 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);
  223.                 mc.endFill();
  224.                 //trace(mc._name+":"+(a0+(a-a0)/2));
  225.                 if(a0+(a-a0)/2>0 && a0+(a-a0)/2<90){
  226.                         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);
  227.                         label.autoSize = "left";
  228.                 }else if(a0+(a-a0)/2>90 && a0+(a-a0)/2<180){
  229.                         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);
  230.                         label.autoSize = "right";
  231.                 }else if(a0+(a-a0)/2>180 && a0+(a-a0)/2<270){
  232.                         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);
  233.                         label.autoSize = "right";
  234.                 }else if(a0+(a-a0)/2>-90 && a0+(a-a0)/2<0){
  235.                         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);
  236.                         label.autoSize = "left";
  237.                 }else if(a0+(a-a0)/2==0){
  238.                         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);
  239.                         label.autoSize = "left";
  240.                 }else if(a0+(a-a0)/2==90){
  241.                         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);
  242.                         label.autoSize = "center";
  243.                 }else if(a0+(a-a0)/2==180){
  244.                         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);
  245.                         label.autoSize = "right";
  246.                 }
  247.                
  248.                
  249.                 label.html = true;
  250.                 if(percentshow=="all"){
  251.                         label.htmlText = arr_name+":"+valuepercent+"%";
  252.                 }else if(percentshow=="font"){
  253.                         label.htmlText = arr_name;
  254.                 }else if(percentshow=="num"){
  255.                         label.htmlText = valuepercent+"%";
  256.                 }
  257.                 var myformat:TextFormat = new TextFormat();
  258.                 myformat.font = "Verdana";
  259.                 myformat.size = 12;
  260.                 myformat.color = fontcolor;
  261.                 label.setTextFormat(myformat);
  262.                 label.gridFitType = "pixel";
  263.                 label.antiAliasType = "advanced";
  264.                 label.sharpness = -400;
  265.                
  266.         }
  267.         //--------------------------------------
  268.         //点击移动
  269.         mc.onRelease = function(){
  270.                 //移动方向:度数:
  271.                 go_a = a0+(a-a0)/2;
  272.                 //移动距离
  273.                 go_w = movew;
  274.                 //trace(this._name);
  275.                 //trace(this.enabled);
  276.                
  277.                 if(mc._x!=0 || mc._y!=0){
  278.                         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);
  279.                         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);
  280.                         //透明度
  281.                         myTweeenalpha2=new Tween(mc,"_alpha",Regular.easeOut,mc._alpha,mcalpha,1,true);
  282.                        
  283.                         var listener3:Object = new Object();
  284.                         mc.enabled = false;
  285.                         ordermc.enabled = false;//竖向排列本pie对应的方块mc
  286.                         listener3.onMotionFinished = function(){
  287.                                 mc.enabled = true;
  288.                                 ordermc.enabled = true;//竖向排列本pie对应的方块mc
  289.                         }
  290.                         myTweeen3.addListener(listener3);
  291.                         //mc._x = mc._x - (getPoint(x0,y0,go_w,go_w,go_a).x-x0);
  292.                         //mc._y = mc._y - (getPoint(x0,y0,go_w,go_w,go_a).y-y0);
  293.                 }else{
  294.                         //到达新点
  295.                         myTweeen1=new Tween(mc,"_x",Regular.easeOut,mc._x,(getPoint(x0,y0,go_w,go_w,go_a).x-x0),1,true);
  296.                         myTweeen2=new Tween(mc,"_y",Regular.easeOut,mc._y,(getPoint(x0,y0,go_w,go_w,go_a).y-y0),1,true);
  297.                         //透明度
  298.                         myTweeenalpha=new Tween(mc,"_alpha",Regular.easeOut,mc._alpha,alpha,1,true);
  299.                        
  300.                         var listener1:Object = new Object();
  301.                         mc.enabled = false;
  302.                         ordermc.enabled = false;//竖向排列本pie对应的方块mc
  303.                         listener1.onMotionFinished = function(){
  304.                                 mc.enabled = true;
  305.                                 ordermc.enabled = true;//竖向排列本pie对应的方块mc
  306.                         }
  307.                         myTweeen1.addListener(listener1);
  308.                 }
  309.                 //trace(this.getDepth());
  310.         }
  311.         //默认位置(移动)
  312.         if(movenow=="true"){
  313.                 //移动方向:度数:
  314.                 go_a = a0+(a-a0)/2;
  315.                 //移动距离
  316.                 go_w = movew;
  317.                
  318.                 myTweeen5=new Tween(mc,"_x",Regular.easeOut,mc._x,(getPoint(x0,y0,go_w,go_w,go_a).x-x0),1,true);
  319.                 myTweeen6=new Tween(mc,"_y",Regular.easeOut,mc._y,(getPoint(x0,y0,go_w,go_w,go_a).y-y0),1,true);
  320.                 //透明度
  321.                 myTweeenalpha=new Tween(mc,"_alpha",Regular.easeOut,mc._alpha,alpha,1,true);
  322.                        
  323.                 var listener5:Object = new Object();
  324.                 mc.enabled = false;
  325.                 ordermc.enabled = false;//竖向排列本pie对应的方块mc
  326.                 listener5.onMotionFinished = function(){
  327.                         mc.enabled = true;
  328.                         ordermc.enabled = true;//竖向排列本pie对应的方块mc
  329.                 }
  330.                 myTweeen5.addListener(listener5);
  331.         }
  332.        
  333. }
  334. /*--------------------------------------------------------------------------------------------
  335. x=a*cosX //x、y是椭圆上一点的坐标;a、b分别是长、短轴
  336. y=b*sinX //X是椭圆旋转的角度。
  337. 计算椭圆上点的位置函数,x0,y0为圆心;w,h为长短轴;a为度数。返回一个坐标对象,有x和y两个属性。
  338. */
  339. function getPoint(x0:Number, y0:Number, w:Number, h:Number, a:Number):Object {
  340.         a = a*Math.PI/180;
  341.         return {x:Math.cos(a)*w+x0, y:Math.sin(a)*h+y0};
  342. }
  343. //--------------------------------------------------------------------------------------
  344. /*--------------------------------------------------------------------------------------------
  345. 将颜色加深
  346. 原有颜色oldcolor为十六进表示法如:0xff6600;返回同样类型的值
  347. */
  348. function darkcolor(oldcolor:Number,dark:Number):Number{
  349.         //求暗色
  350.         if(oldcolor.toString(16).length<6){//防止这个十六进制数的第一位为0;
  351.                 r = parseInt("0x0"+substring(oldcolor.toString(16), 0, 1));
  352.                 g = parseInt("0x"+substring(oldcolor.toString(16), 2, 2));
  353.                 b = parseInt("0x"+substring(oldcolor.toString(16), 4, 2));
  354.         }else{
  355.                 r = parseInt("0x"+substring(oldcolor.toString(16), 0, 2));
  356.                 g = parseInt("0x"+substring(oldcolor.toString(16), 3, 2));
  357.                 b = parseInt("0x"+substring(oldcolor.toString(16), 5, 2));
  358.         }
  359.         //trace("原始rgb:"+r+":"+g+":"+b);
  360.         //dark = 1.43;
  361.         r=Math.round(r/dark).toString(16);
  362.         g=Math.round(g/dark).toString(16);
  363.         b=Math.round(b/dark).toString(16);
  364.         //trace("新rgb:"+r+":"+g+":"+b);
  365.         r.length==1 ? r="0"+r:r;
  366.         g.length==1 ? g="0"+g:g;
  367.         b.length==1 ? b="0"+b:b;
  368.        
  369.         var hicolor:Number;
  370.         hicolor = parseInt("0x"+r.toString(16)+""+g.toString(16)+""+b.toString(16));
  371.         r = parseInt("0x"+substring(hicolor.toString(16), 0, 2));
  372.         g = parseInt("0x"+substring(hicolor.toString(16), 3, 2));
  373.         b = parseInt("0x"+substring(hicolor.toString(16), 5, 2));
  374.         return hicolor;
  375. }
复制代码
已有 1 人评分威望 收起 理由
mirycat + 4 精品文章

总评分: 威望 + 4   查看全部评分

美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11
租服务器,上51IDC | [长沙]招聘:PHP经理10K/WEB前端6K/PHP开发6K

使用道具 举报

amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-13 13:57:27 |显示全部楼层
效果图如:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11

使用道具 举报

jevin 

小丑鱼

银牌会员

帖子
1562
体力
5411
威望
0
发表于 2007-3-13 14:06:10 |显示全部楼层
好长的代码呀 先回个 慢慢看
xhtml/css/Ajax/AS/php/mysql你才是程序员,你家全是程序员 -__-

使用道具 举报

帖子
16
体力
35
威望
0
发表于 2007-3-13 14:08:54 |显示全部楼层

很实用的代码..

很实用的代码..
不错..很强..

使用道具 举报

帖子
101
体力
445
威望
0
居住地
吉林省 延边朝鲜族自治州
发表于 2007-3-13 14:11:47 |显示全部楼层

很不错

guod!
http://www.TQRB.com

使用道具 举报

无雨之城

银牌会员

帖子
245
体力
1050
威望
8

比赛勋章

发表于 2007-3-13 16:38:19 |显示全部楼层
太牛了!不顶不行.

使用道具 举报

帖子
104
体力
414
威望
0
发表于 2007-3-13 16:57:21 |显示全部楼层
楼主,你太好了,谢谢啊。。最合像我这样的菜菜学了。。。

使用道具 举报

amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-14 12:24:02 |显示全部楼层

打包成rar通过xml文件配置,可直接使用

增加了xml配置文件,可以直接修改xml文件以达到直接使用的目的。


默认数据来源为piedata.xml但是可以在页面中修改这个数据来源。
如下:
<object classid="clsid27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="600" height="600">
  <param name="movie" value="ok.swf?piedata=piedata.asp" />
  <param name="quality" value="high" />
  <embed src="ok.swf?piedata=piedata.asp" quality="high" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="600" height="600"></embed>
</object>

在代码中swf文件名后加上参数?piedata=piedata.asp则可以修改数据来源为piedata.asp。

[ 本帖最后由 amu945 于 2007-3-14 13:35 编辑 ]
附件: 你需要登录才可以下载或查看附件。没有帐号?注册
美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11

使用道具 举报

CK同伈鎖

荣誉管理

帖子
4640
体力
19243
威望
372
发表于 2007-3-14 12:56:42 |显示全部楼层
good, 打分

使用道具 举报

YuSonG 
帖子
208
体力
691
威望
0
发表于 2007-3-14 22:19:31 |显示全部楼层
且不如何使用和学习,
光看看那个“饼图”的色彩就讨人爱!
爱蓝色,爱生活

使用道具 举报

hk3000 
帖子
157
体力
553
威望
0
居住地
天津市 滨海区
发表于 2007-3-15 09:51:56 |显示全部楼层
挺好!

使用道具 举报

寒绪

中级会员

帖子
272
体力
963
威望
8
居住地
江苏省 无锡市
发表于 2007-3-15 10:09:47 |显示全部楼层
好东西!
快乐每一天!

使用道具 举报

帖子
2
体力
9
威望
0
发表于 2007-3-15 10:40:51 |显示全部楼层
高手 厉害

使用道具 举报

ayayi 
帖子
27
体力
50
威望
0
发表于 2007-3-15 11:05:07 |显示全部楼层
Good!!参考一下
占位

使用道具 举报

帖子
197
体力
505
威望
0
发表于 2007-3-15 11:39:09 |显示全部楼层
没话可说!顶就一个字
做人要厚道!入到很晚,但很勤奋!

使用道具 举报

帖子
101
体力
215
威望
0
发表于 2007-3-15 12:18:32 |显示全部楼层
好!非常好!
在建人才网
job662.com

使用道具 举报

轻舞宝宝

金牌会员

帖子
1376
体力
4108
威望
0
发表于 2007-3-15 12:26:00 |显示全部楼层
太强了~~~~~~~~~~~!我转自己博客上去行不行?

[ 本帖最后由 qingwubaobao 于 2007-3-15 12:29 编辑 ]
我好像总是那么困

使用道具 举报

amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-15 12:51:52 |显示全部楼层
随便转,如果给面子留下我的名字与邮箱好。如果不好排版就算了。
美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11

使用道具 举报

对酒当歌

银牌会员

帖子
436
体力
2602
威望
3
发表于 2007-3-15 15:12:06 |显示全部楼层
饼图原理很难,谢谢楼主
http://www.liuhuan.com

使用道具 举报

amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-15 15:20:23 |显示全部楼层
其实原理也不难得。

先画个圆(扇形)做上表面,然后分别画出两个侧面和一个曲面,最后画底下的圆(扇形)。一个立体的小扇形就出来了。

让他们一起拼在一起就成了饼图嘛。

只有一点比较烦就是确定每一个扇形的深度,好让他们在视学上看起来处于正常的前后关系位置。在这儿,我想了一个法子。
先算出当前扇形的中间度数,看这个度数是否在水平线以下,是的话就看这个度数与垂直方向的角度,角度最小的在最前面,最大的在最后面,如果中间度数在水平线以上,那么则与中间度数在水平线以下的相反。这儿要注意的是必须要从正上方作为0度,开始计算。
美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11

使用道具 举报

帖子
103
体力
225
威望
0
发表于 2007-3-15 16:08:10 |显示全部楼层
果真不错!贴几个来自http://www.kingimg.com/搜索到的饼状图的png素材:
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

帖子
103
体力
225
威望
0
发表于 2007-3-15 16:12:27 |显示全部楼层
http://www.kingimg.com/search.as ... C%E7%8A%B6%E5%9B%BE
附件: 你需要登录才可以下载或查看附件。没有帐号?注册

使用道具 举报

amu945 楼主
帖子
1745
体力
13109
威望
47
居住地
重庆市 九龙坡区
发表于 2007-3-15 19:00:27 |显示全部楼层
呵呵,这个很高难。我现在做不出来哟。

等过段时间我去看看那个位图相关的东西,说不定可以在上面贴一些好看的效果上去。

[ 本帖最后由 amu945 于 2007-3-15 19:03 编辑 ]
美女车手Victoria Pendleton
http://www.ibiker.net/communion/question.php?id=11

使用道具 举报

remain 

残缺

银牌会员

帖子
1221
体力
2368
威望
4
发表于 2007-3-16 10:13:07 |显示全部楼层
呵呵,楼主几何学得不错啊。
我刚写完一个vim的tabs插件

使用道具 举报

帖子
13
体力
20
威望
0
发表于 2007-3-16 11:36:33 |显示全部楼层

牛人,支持

牛人,支持,学习中. ....

使用道具 举报

帖子
21
体力
53
威望
0
发表于 2007-3-16 14:22:24 |显示全部楼层
什么时候我才能到这种程度哦``
追寻梦想

使用道具 举报

fadbox 
帖子
185
体力
374
威望
0
发表于 2007-3-16 19:37:04 |显示全部楼层
好厉害!!!

使用道具 举报

xtyle 
帖子
7
体力
18
威望
0
发表于 2007-3-17 09:13:28 |显示全部楼层
太强了,赞一个

使用道具 举报

帖子
42
体力
224
威望
0
居住地
浙江省 杭州市
发表于 2007-3-17 14:40:33 |显示全部楼层
很棒棒 下了学习  不过几何学的一塌糊涂  呵呵

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

Archiver|手机版|安久科技提供CDN|blueidea.com ( 京ICP备05002321号 )  

GMT+8, 2012-2-11 04:03 , Processed in 0.155235 second(s), 9 queries , Gzip On, Memcache On.

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部