| 首页 | 新闻 | 网页 | 设计 | 色彩 | 原创 | 视觉 | 素材 | 动漫 | 酷站 | 策划 | 文案 | 访谈 | 运营 | 编程 | 数据库 | 服务器 | 下载 | 图库 | 
您的位置: 幽幽天空 > 网页 > 网页制作 > Flash教程 > ActionScript教程 > 文章正文 用户登录
圆形公式的运用
纯AS绘制圆形的一
as的画圆形的动画

圆形分格统计图表之组件版           

圆形分格统计图表之组件版

作者:佚名 来源:闪吧 更新:2007-1-13 20:49:00 错误报告 我要投稿

这是例子




点击浏览该文件

这是原文件

点击浏览该文件

强烈要求版主把".AS"文件格式添加为可上传的文件类型

这是组件的代码大家把他考贝到Flash2004保存为pie.as并把他放到和那个原文件同一目录下就可以了

class pie extends MovieClip {
   /*********************************************************
   圆形分格统计图表 组件
   版本:1.0
   核芯代码来自Super-Tomato
   我将它改写成AS2.0的组件 并添加了功能 这样方便大家使用
   1.只要在组件属性面板中填写数据就可以自动生成圆饼图
   2.可以动态的修改组件的m_data属性并调用DrawPIE();来动态更新圆饼图
   3.修正了原代码的设置半径的BUG(至少在我这发现直接修改radius的值没有效果)
   4.可以指定颜色,如果没有颜色值则随机生成
   
   计划在下个版本中加入以下功能
   1.相应事件
   2.添加标签
   3.可直接支持XML
   4.其他想到在说阿 各位也可以 提点意见
   
   koaqiu 2004-5-24于 E++工作室
   **********************************************************/


   private var angleA:Array = new Array();
   private var angleB:Array = new Array();
   private var radius:Number =100;
   private var MC:MovieClip;
   var m_data:Array;
   var m_color:Array;
   var m_radius:Number;
   private function MakeAngle(md:Array) {
      var l:Number;
      var i:Number;
      var 和:Number = 0;
      var md_agn:Array = new Array();
      angleA=new Array();
      angleB=new Array();
      for (i=0; i<md.length; i++) {
         和 += md[i];
      }
      for (i=0; i<md.length; i++) {
         md_agn.push(360*md[i]/和);
      }
      for (i=1; i<md_agn.length; i++) {
         md_agn[i] = md_agn[i]+md_agn[i-1];
      }
      angleA[0] = 0;
      for (i=1; i<md_agn.length; i++) {
         angleA[i] = md_agn[i-1];
      }
      for (i=0; i<md_agn.length; i++) {
         angleB[i] = md_agn[i];
      }
   }
   function pie() {
      MC=this;
      DrawPIE();
   }
   function DrawPIE() {
      radius=this.m_radius;
      MakeAngle(this.m_data);
      for (var i = 0; i<angleA.length; i++) {
         MC.attachMovie("pie_mc", "pie"+i, i);
         MC["pie"+i]._width =radius*200/100 ;
         MC["pie"+i]._height = radius*126.6/100;
         MC["pie"+i]._x = MC["pie"+i]._width/2;
         MC["pie"+i]._y = MC["pie"+i]._height/2;

         MC.createEmptyMovieClip("mask"+i, i+angleA.length);
         MC["mask"+i]._x = MC["pie"+i]._x;
         MC["mask"+i]._y = MC["pie"+i]._y-15;
         Draw(angleA[i], angleB[i], i);
         MC["pie"+i].setMask(MC["mask"+i]);
         if(isNaN(this.m_color[i])){
            setHue(Math.floor(Math.random()*0xFFFFFF), i);
         }else{
            setHue(this.m_color[i], i);
         }
      }
   }
   private function Point(Angle:Number) {
      var pt:Object = new Object();
      pt.x = radius*Math.cos((Math.PI/180)*Angle);
      pt.y = (0.5)*radius*Math.sin((Math.PI/180)*Angle);
      return pt;
   }

   private function Draw(angleA:Number, angleB:Number, depth:Number) {
      var drawer:MovieClip = MC["mask"+depth].createEmptyMovieClip("drawer", 0);
         drawer.beginFill(0xFFFFFF, 30);
         var pt1:Object = Point(angleA);
         drawer.lineTo(pt1.x, pt1.y);
         if (pt1.y<=0) {
            drawer.lineTo(2*pt1.x, 2*pt1.y);
         } else {
            drawer.lineTo(pt1.x, pt1.y+50);
         }
         var tempAngle:Number = angleA+10;
         while (tempAngle<angleB) {
            var tempPt:Object = Point(tempAngle);
            drawer.lineTo(2*tempPt.x, 2*tempPt.y);
            tempAngle += 10;
         }
         var pt2:Object = Point(angleB);
         
         if (pt2.y<=0) {
            drawer.lineTo(2*pt2.x, 2*pt2.y);
         } else {
            drawer.lineTo(pt2.x, pt2.y+50);
         }
         drawer.lineTo(pt2.x, pt2.y);
         drawer.endFill();

   }
   private function setHue(rgb:Number, depth:Number) {
      var c:Color = new Color(MC["pie"+depth]);
      var cv:Number = rgb;
      var r:Number = (cv >> 16)/2;
      var g:Number = ((cv >> 8) & (0xFF))/2;
      var b:Number = (cv & 0xFF)/2;
      c.setTransform({ra:r, ga:g, ba:b, rb:0, gb:0, bb:0, aa:100, ab:0});
   }
}


文章录入:skyuu    责任编辑:skyuu 
  • 上一篇文章:

  • 下一篇文章:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    发表评论:
    姓名:  评 分: 1分 2分 3分 4分 5分
     
  • 严禁发表危害国家安全、政治、黄色淫秽等内容的评论。
  • 用户需对自己在使用幽幽天空服务过程中的行为承担法律责任。
  • 本站管理员有权保留或删除评论内容。
  • 评论内容只代表机友个人观点,与本网站立场无关。