| Ok,抓笔的人已经松开了吧。我们要在lineto的基础上改进一下,加入如下代码:
 
 createEmptyMovieClip("drawobj", 1);
 
 Movieclip.prototype.makeBox = function(x, y, l) {
 
 this.lineto(x, y+l);
 
 this.lineto(x+l, y+l);
 
 this.lineto(x+l, y);
 
 this.lineto(x, y);
 
 };
 
 //init
 
 with (drawobj) {
 
 moveto(100,100);
 
 beginfill(0x333333, 100);
 
 linestyle(.1, 0x111111, 100);
 
 makeBox(100,100,100);
 
 endfill();
 
 }
 
 我们定义的makeBox如其名,就是画正方形的,它在我们的初始化部分会用到,l参数是边长。当程序初始化的时候,我们对drawobj进行操作,首先用moveto来改变它的位置,接着我们会用到fill;它包括两部分,一个是普通的beginfill,是设置填充的参数起点,当我们用makeBox画好了正方形后,必须要用到endfill才可以更新当前的fill,否则什么beginfill也没什么意义(虽然我不加也照样更新)。(图2)
 
 
  
 (图2)
 
 再接再厉,我们再结合另一个方法来看看程序作出来的图形的魅力。加入代码:
 
 createEmptyMovieClip("drawobj", 1);
 
 drawobj.linestyle(.1, 0x111111, 100);
 
 for (var i=0; i<=50; i+=.1) {
 
 with (drawobj)
 
 }
 
 这里我们先抛弃所谓的程序执行效率,用感性的大脑来写程序(自杀行为)。凭空想象可能发生的事情,如果不知道的话,就随便写几个random,然后动态改变颜色和Alpha,最后用curveto方法来画曲线。值得注意的是curveto的后两个参数x轴曲线偏移和y轴曲线偏移,不要做的太大,否则会更慢……,那么自杀式的程序写完后执行下,n秒钟后出现了一幅图画,看起来还有点味道(图3)
 
  
 (图3,我不知道是什么,我想毕加索也不知道)
 
 看来,艺术的意义永远无法解释,但我们的程序还得继续往下写。上面说的Fill方法的第一种是普通的beginFill,只可以填充固定的颜色;而另一种就比较好用了,叫做beginGradientFill,用途是填充过渡色。还是先来动手再说是怎么回事,加代码(今天怎么总写代码?不要逃避,看下去◎):
 
 createEmptyMovieClip("drawobj", 1);
 
 drawobj.linestyle(.1, 0x111111, 100);
 
 for (var i=0; i<=100; i++) {
 
 with (drawobj) {
 
 cx=random(200);
 
 cy=random(200);
 
 makeBox(cx,cy,random(100));
 
 drawWay=random(2) ===1 ? "linear" : "radial";
 
 colorRange = [0x111111, 0xeeeeee];
 
 alphaRange = [random(100), random(100)];
 
 ra = [0, random(255)];
 
 colorChart = {a:random(100), b:0, c:0, d:random(100), e:0, f:random(100), g:random(100), h:random(100), i:1};
 
 beginGradientFill(drawway, colorRange, alphaRange, ra, colorChart);
 
 }
 
 }
 
 这里我们分别使用begineGradientFill的两种填充方式:linear线性填充和radial环行填充来演示了一些正方形组合在一起的样子。这种填充方式需要的数据比较多,而且都为数组形式,其格式是唯一的:beginGradientFill(方式,颜色范围,Alpha范围,过渡范围,过渡参数),缺一不可;但是过渡参数的形势可以有两种,一种是以3*3矩阵表示,内容为[a,b,c,d,e,f,g,h,i],分别表示填充的宽,x轴起点,y轴起点,明度,x轴偏移色,y轴偏移色,高,填充角度等填充参数;而另一种比较直观,是以[x轴起点;y轴起点;宽;高;填充角度]组成的数组,我比较喜欢这种方式,方便而且速度快一些。我们随机的放入一些数据来看看能形成什么样子,不过在这个过程中,我意外的发现如果我们先用makeBox,再做Fill,那么将不会用到endfill()来结束填充(这个endfill总感觉没什么用途,或者说没有它应该有的功能)。运行一下,又经过几十秒后,一幅很酷的类似某有名设计师的画面出现了……(图4)
 
 
  
 (图4,真的眼熟……)
 
 |