function circleforbase() {//用来画基础圆的mc,以后的所有圆或椭圆都由这个圆复制得来 _root.createEmptyMovieClip("circle", 0);//创建一个空的mc circle.lineStyle(1, 0x000000, 100);//设置线的属性 var th = 0;//这个是使用圆的参数方程画圆的那个参数~每次以step累加 var step = 0.01;//参数的步长,即每隔0.01弧度描一个点 with (circle){ moveTo(100, 0);//移到将要画的圆最右边的那个点 do{ th += step;//参数值增加 lineTo(Math.cos(th)*100, Math.sin(th)*100);//按参数方程描点 } while (th<=Math.PI*2);//当参数等于2PI时停止,刚好一个圆周 _visible = 0;//将这个画好的圆设置为“隐形” } } circleforbase();//画一个基础圆mc,注意这个基础圆的mc名字叫circle n = 0;//表示圆的个数 f = 0;//表示鼠标的状态,1表示处于按下状态,0相反 stx = 0; sty = 0; enx = 0; eny = 0; //椭圆将被包涵在一个矩形内,以上的四个变量表示矩形的对角线上的两个顶点,这样能确定这个矩形 function drawoval(sx,sy,ex,ey,n){//画 圆/椭圆 的方法,实际上前面四个参数确定了一个矩形,但要注意只是逻辑上的矩形, //我们并不把他画出来,只是在他的范围内画那个椭圆,下面的注释会阐述这个矩形是什么样子的 _root.circle.duplicateMovieClip("cir"+n,n);//复制出一个标准圆(半径为100的那个基础mc) with(_root["cir"+n]){ _xscale = Math.abs(ex-sx)/2;//设置椭圆的平行于x轴的半轴长 _yscale = Math.abs(ey-sy)/2;//设置椭圆的平行于y轴的半轴长 _x = 0.5*(sx+ex);//他的中心的x坐标为矩形对角线中点的x坐标 _y = 0.5*(sy+ey);//他的中心的y坐标为矩形对角线中点的y坐标 } } _root.onMouseDown = function(){ f=1; stx = _root._xmouse; sty=_root._ymouse; n++;//每当鼠标按下,f值赋为1,矩形的一个顶点即为鼠标按下时的坐标,准备画第n个椭圆。 } _root.onMouseUp = function(){ f=0;//鼠标松开,f赋为0,这样当鼠标移动时不会继续画椭圆 } _root.onMouseMove = function(){ if (f){//当鼠标移动时,如果鼠标按下执行代码(即重绘第n个椭圆) enx=_root._xmouse; eny=_root._ymouse;//确定外切这个椭圆的矩形(边平行于坐标轴的矩形) drawoval(stx,sty,enx,eny,n);//在参数确定的那个矩形内重绘第n个椭圆 } }