您现在的位置是: 软件 > 设计在线 > Flash > 基础教程 > 正文


-网页表格制作速查手册
-Visual C++ MFC/ATL开发
-Visual C++ 数据库开发
-打开闪烁的新世界:体验Flash MX

体验Flash MX(4):用代码绘图
2002-03-22· ·Demon.S··DnVsystem

上一页  1 2 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,真的眼熟……)

  最后,如果你不喜欢这个样子,你可以用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或者别的帧。

上一页  1 2 3  

■ 相关内容
 体验Flash MX(10):服务器/客户数据存储控制
 体验Flash MX(9):Button对象
 使用Flash MX制作动态相册
 体验Flash MX(8):控制时钟Timer
 用Flash MX制作飞舞的蝴蝶
 用Flash MX制作舞动的龙
 体验Flash MX(7):及时监听对象Listener
 体验Flash MX(5):网络数据和文本相关操作
 体验Flash MX(2):LoadMovie和LoadVars
 体验Flash MX(1): 打开闪烁的新世界
 Macromedia Flash MX的10个新特性
 Macromedia隆重发布Flash MX
感谢 访问天极网,如果您觉得该文章涉及版权问题,请看这里!