翻译:flashmeng

MovieClip.beginFill(rgb, alpha)

这个指令用来设定“虚拟钢笔”所绘制出的封闭的区域的填充颜色和不透明度,如果没有指定lineStyle的rgb和alpha的值则线条是不可见的。
RGB:用来设定封闭区域的填充颜色,和上边的lineStyle的设定方法一样都是使用16进制代码来表示。如果没有指定颜色则填充为黑色。
Alpha:和lineStyle的意义相同,不再细述。
实例说明:
如同lineStyle,你可以将rgb, alpha的值缺省而使用默认值。它需要配合使用 lineTo 或 curveTo (这个以后将讲道) 来定义封闭区域的各个顶点位置(也就是围成这个封闭区域的线条的交点位置)从而知道这个封闭区域的形状、大小以及位置。举一个简单的例子:

_root.beginFill(0x00FF00);
_root.moveTo(100,100); // this is the origi
_root.lineTo(200,100);
_root.lineTo(200,200);
_root.lineTo(100,200);

这段as将生成一个绿色的正方形,四个顶点的坐标分别为:
(100,100);(200,100);(200,200);(100,200)。
我们可以通过定义lineStyle来扩展一下

on (release) {
  _root.lineStyle(0x0000FF);
  _root.beginFill(0x00FF00);
  _root.moveTo(100,100); // this is the origin
  _root.lineTo(200,100);
  _root.lineTo(200,200);
  _root.lineTo(100,200);
}

这样就可以得到一个边框为1像素的蓝色的布透明的边框,其他各项参数不变。
但是,我强烈推荐通过使最后所画的直线回接到图形的出发点的方式来封闭填充图形。有关上面的代码的另外一个问题是填充是从左开始的,后面每遇到一个lineto 语句都会继续改变。另外一种可能引起麻烦的情况是,在勾画填充的代码中,每加入一个moveto语句都会使原来的填充自动封闭而重新开始一个新的填充。运行下面的代码来看一下是怎样的情形, (也就是说但如果你在as中没有闭合所绘制的路径的话,程序就会自动的将第一个“点”和最后一个“点”连接起来使得路径闭合以得到一个封闭的区域。)看如下代码:

_root.beginFill(0x00FF00);
_root.moveTo(100,100); // 这是原点
_root.lineTo(200,100);
_root.lineTo(200,200);
_root.moveTo(100,200); // 闭合第一个填充区域并且开始一个新的
_root.lineTo(200,300);
_root.lineTo(100,300);
这样我们可以得到两个等边三角形。

MovieClip.endFill()

这个指令没有附带参数,它声明结束一个beginFill指令并且清除早先对“钢笔”的种种设置,它不能单独出现只能和beginFill指令成对出现。当然你可以不使用它就像上边的as一样,我们建议你养成使用endFill的好习惯。下边的as将绘制一个正方形:

_root.beginFill(0x00FF00);
_root.moveTo(100,100); // 定义了原点位置
_root.lineTo(200,100);
_root.lineTo(200,200);
_root.lineTo(100,200);
_root.lineTo(100,100); // 闭合路径
_root.endFill(); // 结束Fill

这是段很工整的as,下边的这个例子中你可以脱拽三个句柄来实时改变三角形的形状、位置、大小等。

下边是核心代码:

// 在舞台上放置3个句柄来定义出三角形的各个顶点
_root.attachMovie("squareHandle", "h1", 5);
_root.attachMovie("squareHandle", "h2", 6);
_root.attachMovie("squareHandle", "h3", 7);
h1._x = 50;
h1._y = 150;
h2._x = 250;
h2._y = 150;
h3._x = 150;
h3._y = 50;
// 创建一个空的MC来放置他们
_root.createEmptyMovieClip("mc", 1);
// 定义函数draw
function draw() {
  // 清除以前的填充设置
  mc.clear();
  // 设置填充的各项参数
  mc.beginFill(0x0000FF, 20);
  // 根据3个句柄的位置绘制出三角形
  mc.moveTo(h1._x, h1._y);
  mc.lineTo(h2._x, h2._y);
  mc.lineTo(h3._x, h3._y);
  mc.lineTo(h1._x, h1._y);
  // 结束Fill
  mc.endFill();
}
// 使函数draw每隔25毫秒刷新一次
setInterval(draw, 25);
// 完成as

MovieClip.clear()

在上边的as中我们遇到了这个新的指令mc.clear();它的作用就是清除mc。包括对这个mc本身的设置和mc中所包含的物件,并且将虚拟钢笔的各项参数恢复到默认值。

举例说明:
在本文的开始我们就已提到及时清除绘制过的、没有用的线条或形状的必要性,使用clear可以及时的释放内存空间而不至于造成系统崩溃。但由于它清除了所有的物件,当你想要保留某个物件的时候你就不得不再次把它“绘制”出来。
下边是例子:

posted on 2006-08-19 18:01  榻榻米  阅读(290)  评论(0编辑  收藏  举报