看来,艺术的意义永远无法解释,但我们的程序还得继续往下写。上面说的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,真的眼熟……)
最后,如果你不喜欢这个样子,你可以用drawobj.clear()来清空你画的这些……
程序化的Mask蒙版
Flash MX现在已经可以在程序中直接定义两个Mask的主从关系,让我们从一个例子来看看:(代码)
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);
};
createEmptyMovieClip("drager",2);
drager.linestyle(.1, 0x111111, 100);
drager.beginfill(0x333333, 100);
drager.makeBox(0,0,30);
drager.endfill();
createEmptyMovieClip("jpgObj",1);
createEmptyMovieClip("loader",3);
loader.onenterframe=function(){
if(_root.jpgObj._width<>0){
_root.jpgObj.setMask
(_root.drager);removeMovieclip(this)
}
};
jpgObj.loadMovie("boy.jpg");
drager.startDrag(true);
这个例子我们结合这几天所学的一些东西,而且还用到了那个小男孩。程序开始的时候会画出一个灰色的正方形,当然作为Mask的MovieClip颜色是无所谓的,接着我们再创建一个MovieClip,作为被Mask的对象,当然到这里理论上我们可以直接用命令来控制Mask,但是,我们要考虑图片是否被读取的这个因素。而且,还是理论上我们可以用ondata这个事件来获取,但是F6播放器做的好象有问题……MovieClip的ondata被错误的传递给了_root,而且还不是正确的时候传递的。那我们没办法,只好再增加一个loader MovieClip作为判断是否读取得条件,当然,满足后需要自己释放自己所占有的内存,并且用setMask来遮盖我们所读取的图片;最后,把方块绑在鼠标上就完成了,整个流程看似基本上不会发生什么错误了……(图5)

(图5)
源文件:http://www.dnvs.net/tutorial/flash_mx/day4.zip
注:
FlashMX的程序虽然基本上都可以写入第一帧,但是如果考虑时间效率的话,还是分批处理为妙,例如把初始化和最常用的Action先处理,其他的可以放入.as或者别的帧。