发新话题
打印

[编程] 类的使用

类的使用

各位前辈,小弟正在学习类的使用,能给我传个简单的2.0的类的使用的例子吗?连外部AS文件也传一下,不甚感激啊!

TOP

这是一个画扇形图的类:
class:
class ht {
        public var fk_x:Number = 50;
        public var fk_y:Number = 350;
        public var x0:Number = 300;
        public var y0:Number = 250;
        public var r:Number = 80;
        public var ys_array = new Array(0x000000, 0xff0000, 0x00ff00, 0x0000ff, 0xcccc66, 0x66cc00, 0xcc00ff, 0x000099, 0x003300, 0x00cc00, 0x990099, 0x000000, 0xff0000, 0x00ff00, 0x0000ff, 0xcccc66, 0x66cc00, 0xcc00ff, 0x000099, 0x003300, 0x00cc00, 0x990099);
        public var sj_array:Array;
        public var jd_array:Array = new Array();
        public var mc:MovieClip;
        public var zs:Number = 0;
        public function ht(sj_array:Array, mc:MovieClip) {
                this.sj_array = sj_array;
                this.mc = mc;
        }
        //计算sj_array的数据的和;
        public function setp():Number {
                var i:Number = 0;
                for (i=0; i<this.sj_array.length; i++) {
                        this.zs = this.zs+this.sj_array;
                }
                return this.zs;
        }
        //给jd_array赋值;
        public function seth() {
                var i:Number = 0;
                setp();
                for (i=0; i<this.sj_array.length; i++) {
                        if (i == 0) {
                                this.jd_array = Math.round(1000*(2*Math.PI)*(this.sj_array/this.zs))/1000;
                        } else {
                                this.jd_array = this.jd_array[i-1]+Math.round(1000*(2*Math.PI)*(this.sj_array/this.zs))/1000;
                        }
                }
                //trace(this.jd_array);
        }
        //画扇形:
        public function sethsx():Void {
                seth();
                var l_array = new Array();
                l_array[0] = Number(0);
                var hh_array = l_array.concat(this.jd_array);
                var i:Number;
                var j:Number;
                for (i=0; i<this.jd_array.length; i++) {
                        //fangkuai
                        this.mc.createEmptyMovieClip("fk"+i, 40+i);
                        this.mc["fk"+i].lineStyle(1, 0x000000, 100);
                        this.mc["fk"+i].moveTo((i*50)+fk_x, fk_y);
                        this.mc["fk"+i].beginFill(ys_array);
                        this.mc["fk"+i].lineTo((i*50)+fk_x+20, fk_y);
                        this.mc["fk"+i].lineTo((i*50)+fk_x+20, fk_y+20);
                        this.mc["fk"+i].lineTo((i*50)+fk_x, fk_y+20);
                        this.mc["fk"+i].lineTo((i*50)+fk_x, fk_y);
                        this.mc["fk"+i].endFill();
                        //shuzi
                        this.mc.createTextField("shz"+i, 60+i, (i*50)+fk_x-2, fk_y+20, 40, 40);
                        this.mc["shz"+i].text = Math.round(1000*sj_array/zs)/10+"%";
                        //shanxing
                        this.mc.createEmptyMovieClip("mc"+i, i);
                        this.mc["mc"+i]._alpha = 50;
                        this.mc["mc"+i].onRollOver = function() {
                                this._alpha = 100;
                        };
                        this.mc["mc"+i].onRollOut = function() {
                                this._alpha = 50;
                        };
                        this.mc["mc"+i].lineStyle(1, 0x000000, 100);
                        this.mc["mc"+i].moveTo(x0, y0);
                        this.mc["mc"+i].beginFill(ys_array);
                        for (j=hh_array; j<=hh_array[i+1]; j=j+0.001) {
                                var x1 = x0+r*Math.cos(j);
                                var y1 = y0+r*Math.sin(j);
                                this.mc["mc"+i].lineTo(x1, y1);
                        }
                        this.mc["mc"+i].lineTo(x0, y0);
                        this.mc["mc"+i].endFill();
                }
        }
}
as:
h = new ht(_root.shr_array, _root);
h.sethsx();

TOP

不甚感激,可以给我源文件吗?带AS文件的

TOP

改了一下,正在做这个课件:
统计调查.swf (1.11 KB)
10.1统计调查.rar (6.07 KB)

TOP

不明就问吧,两年前写的类了!

TOP

发行写成类使用确实方便二次使用,这不,修改一下又可以使用了!
不过我对类也没有深入的研究,只要是觉得自己做的东西不需要那么复杂!所以只会些皮毛!希望高手踢教!

TOP

现在正在写一个条形统计图的类,你也可以帮忙想想呀!只要是根据用户提供的数据(数组),画出条形统计图,应该不难!

TOP

些好一点了,下班了,明天再继续:
class txtjt {
        public var zb_x:Number = 200;
        public var zb_y:Number = 200;
        public var sj_array:Array = new Array();
        public var ys_array = new Array(0x000000, 0xff0000, 0x00ff00, 0x0000ff, 0xcccc66);
        public var lx_array:Array = new Array("新闻:", "体育:", "动画:", "娱乐:", "戏曲:");
        public var _mc:MovieClip;
        public function txtjt(sj_array:Array, _mc:MovieClip) {
                this.sj_array = sj_array;
                this._mc = _mc;
        }
}

TOP

不知道这个掉用外部as怎么写import

TOP

不用import;
放在和fla文件一起;
然后
var a=new 类()即可;

TOP

今天继续写着的一个类(条形统计图),现在些好坐标了,分享一下,明天继续:
class txtjt {
//坐标的位置
public var zb_x:Number = 200;
public var zb_y:Number = 200;
//接受数组数据
public var sj_array:Array = new Array();
//数组数据中的最大数据(画坐标的纵轴要用到)
public var max_y:Number;
//数组数据的个数(画坐标的横坐标要用到)
public var max_x:Number;
//条形统计图的条形颜色
public var ys_array = new Array(0x000000, 0xff0000, 0x00ff00, 0x0000ff, 0xcccc66);
//条形统计图的栏目
public var lx_array:Array = new Array("新闻:", "体育:", "动画:", "娱乐:", "戏曲:");
public var _mc:MovieClip;
//建构函数
public function txtjt(sj_array:Array, _mc:MovieClip) {
  this.sj_array = sj_array;
  this._mc = _mc;
  this.max_x = sj_array.length;
}
//定义方法,找出数组中的最大值
public function max_fc():Void {
  var max:Number = sj_array[0];
  for (var i:Number = 0; i<sj_array.length; i++) {
   max<sj_array ? max=sj_array : max=max;
  }
  max_y = max;
}
//定义画出坐标轴的方法
public function zb_fc():Void {
  //画坐标:
  _mc.lineStyle(1, 0x000000, 100);
  _mc.moveTo(zb_x, zb_y);
  _mc.lineTo(zb_x+40*max_x+20, zb_y);
  _mc.lineTo(zb_x+40*max_x+20-5, zb_y-5);
  _mc.moveTo(zb_x+40*max_x+20, zb_y);
  _mc.lineTo(zb_x+40*max_x+20-5, zb_y+5);
  _mc.moveTo(zb_x, zb_y);
  _mc.lineTo(zb_x, zb_y-120);
  _mc.lineTo(zb_x-5, zb_y-120+5);
  _mc.moveTo(zb_x, zb_y-120);
  _mc.lineTo(zb_x+5, zb_y-120+5);
  _mc.moveTo(zb_x, zb_y);
  _mc.lineStyle(1, 0x000000, 30);
  _mc.beginFill(0x33ffcc, 40);
  _mc.lineTo(zb_x+40*max_x, zb_y);
  _mc.lineTo(zb_x+40*max_x, zb_y-100);
  _mc.lineTo(zb_x, zb_y-100);
  _mc.lineTo(zb_x, zb_y);
  _mc.endFill();
  _mc.moveTo(zb_x, zb_y-25);
  _mc.lineTo(zb_x+40*max_x, zb_y-25);
  _mc.moveTo(zb_x, zb_y-50);
  _mc.lineTo(zb_x+40*max_x, zb_y-50);
  _mc.moveTo(zb_x, zb_y-75);
  _mc.lineTo(zb_x+40*max_x, zb_y-75);
  //画条形图:
}
}

TOP

var a=new 类()即可;

var a=new 类()即可;var a=new 类()即可;

TOP

非常感谢前辈!不过有没有调用外部AS的例子,也给我传一个好吗?真是太感谢了!

TOP

哦看到外部的AS文件了,不好意思刚才没有看到,200398sb40whb前辈可以加你QQ吗?晚辈想讨教一下,不知可否,谢谢!

TOP

你好,我比较少上qq,有问题直接在这里问好些,这里我有时间都会来!而且我不会的问题其他会的人也会帮你解决。

TOP

写好了:
class txtjt {
//坐标的位置
public var zb_x:Number = 200;
public var zb_y:Number = 200;
//接受数组数据
public var sj_array:Array = new Array();
//数组数据的个数(画坐标的横坐标要用到)
public var max_x:Number;
//条形统计图的条形颜色
public var ys_array = new Array(0x000000, 0xff0000, 0x00ff00, 0x0000ff, 0xcccc66);
//条形统计图的栏目
public var lx_array:Array = new Array("新闻", "体育", "动画", "娱乐", "戏曲");
public var _mc:MovieClip;
//建构函数
public function txtjt(sj_array:Array, _mc:MovieClip) {
  this.sj_array = sj_array;
  this._mc = _mc;
  this.max_x = sj_array.length;
}
//定义方法,找出数组中的最大值
public function max_fc():Number {
  var max:Number = sj_array[0];
  for (var i:Number = 0; i<sj_array.length; i++) {
   max<sj_array ? max=sj_array : max=max;
  }
  return max;
}
//定义画出坐标轴的方法
public function zb_fc():Void {
  //画坐标:
  _mc.lineStyle(1, 0x000000, 100);
  _mc.moveTo(zb_x, zb_y);
  _mc.lineTo(zb_x+40*max_x+20, zb_y);
  _mc.lineTo(zb_x+40*max_x+20-5, zb_y-5);
  _mc.moveTo(zb_x+40*max_x+20, zb_y);
  _mc.lineTo(zb_x+40*max_x+20-5, zb_y+5);
  _mc.moveTo(zb_x, zb_y);
  _mc.lineTo(zb_x, zb_y-120);
  _mc.lineTo(zb_x-5, zb_y-120+5);
  _mc.moveTo(zb_x, zb_y-120);
  _mc.lineTo(zb_x+5, zb_y-120+5);
  _mc.moveTo(zb_x, zb_y);
  _mc.lineStyle(1, 0x000000, 20);
  _mc.beginFill(0x33ffcc, 40);
  _mc.lineTo(zb_x+40*max_x, zb_y);
  _mc.lineTo(zb_x+40*max_x, zb_y-100);
  _mc.lineTo(zb_x, zb_y-100);
  _mc.lineTo(zb_x, zb_y);
  _mc.endFill();
  _mc.moveTo(zb_x, zb_y-25);
  _mc.lineTo(zb_x+40*max_x, zb_y-25);
  _mc.moveTo(zb_x, zb_y-50);
  _mc.lineTo(zb_x+40*max_x, zb_y-50);
  _mc.moveTo(zb_x, zb_y-75);
  _mc.lineTo(zb_x+40*max_x, zb_y-75);
  _mc.createTextField("y_txt", 0, zb_x, zb_y-120, 30, 18);
  _mc.y_txt.text = "人数";
  _mc.createTextField("x_txt", 1, zb_x+40*max_x, zb_y, 60, 18);
  _mc.x_txt.text = "节目类别";
  tx_fc();
}
//画条形图:
private function tx_fc():Void {
  //条形的宽度:
  var d:Number = 20;
  //条形的距离:
  var l:Number = 40;
  //条形的高度单位:
  var h:Number = 100/max_fc();
  //条形的透明度:
  var ah:Number = 50;
  for (var i:Number = 0; i<max_x; i++) {
   _mc.createEmptyMovieClip("mc"+i, 3+i);
   _mc["mc"+i].lineStyle(1, 0x000000, 0);
   _mc["mc"+i].beginFill(ys_array);
   _mc["mc"+i].moveTo(zb_x+i*l+8, zb_y);
   _mc["mc"+i].lineTo(zb_x+i*l+d+8, zb_y);
   _mc["mc"+i].lineTo(zb_x+i*l+d+8, zb_y-h*sj_array);
   _mc["mc"+i].lineTo(zb_x+i*l+8, zb_y-h*sj_array);
   _mc["mc"+i].lineTo(zb_x+i*l+8, zb_y);
   _mc["mc"+i].endFill();
   _mc["mc"+i]._alpha=ah;
   _mc["mc"+i].onRollOver = function() {
    this._alpha = 100;
   };
   _mc["mc"+i].onRollOut = function() {
    this._alpha = ah;
   };
   //
   _mc.createTextField("txt"+i, 10+i, zb_x+i*l+10, zb_y-h*sj_array-15, 20, 18);
   _mc["txt"+i].text = sj_array;
   _mc.createTextField("lx"+i, 20+i, zb_x+i*l+5, zb_y, 30, 18);
   _mc["lx"+i].text = lx_array;
  }
  for (var i:Number = 0; i<5; i++) {
   _mc.createTextField("rs"+i, 30+i, zb_x-20, zb_y-25*i-10, 20, 18);
   _mc["rs"+i].text = Math.round(max_fc()*i/4);
   _mc["rs"+i].autoSize = "right";
  }
}
}
效果:
var t = new txtjt([4, 10, 15, 18, 3], this);
t.zb_fc();

TOP

对比扇形图:


[ 本帖最后由 200398sb40whb 于 2008-5-10 23:10 编辑 ]

附件

Snap1.jpg (10.56 KB)

2008-5-10 23:08

Snap1.jpg

TOP

哦好的谢谢!

TOP

完善了条形统计图类,方便在fla中决定条形图的名称、坐标名称、数据变化等,实例化:
var t = new txtjt(["新闻", "体育", "新闻"], ["人数", "节目类别"], _mc);
条形数据:t.ht_fc([1, 10, 8]);
具体看http://space.flash8.net/space/?2 ... _itemid_406694.html

TOP

有了条形统计图,折线统计图应该不难了,后续接上!

TOP

折线统计图的类(继承条形形统计图)已经写好,效果如:



具体请看:http://space.flash8.net/space/?uid/284926

TOP

发新话题