| 系统系 | - 操作系统 - 工具软件 - 病毒安全 - Vista专区 | WEB2.0 | - 奇趣 - 发现分享 - 评论员文章 | 视 频 | - 体育 - 娱乐 - 科技 - 教程 |
| 办公系 | - Word - Excel - Powerpoint - 网站建设 | 动画系 | - Flash - Ascript - Flex - MsE Design 教程 | 编程系 | - Asp - Asp.Net - Php - Jsp、Java - CGI/perl |
| 艺术系 | - 酷赏 - 工业 - 建筑 - 界面 - 平面 - 视觉 | 网站系 | - HTML/Xhtml - Js、Ajax - Css - XML、XSLT | 下 载 | - 图形图像 - 多媒体 - 系统办公 |
使用 curveTo 绘制曲线
下一个绘图函数,curveTo(x1, y1, x2, y2),起点和 lineTo 一样,同样是以上一次画线的终点做为本次画线的起点,也可以使用 moveTo 命令指定画笔的起点,如果是第一次画线默认的起点为0,0。
可以看到, curveTo 函数中包括两个点。第一个是控制点影响曲线的形状,另一个是曲线的终点。这里使用的是名为二次方贝塞尔曲线的标准公式,该公式可以计算出两点间的曲线,这条曲线向着控制点弯曲。请注意,这条曲线不会与控制点接触,很像是曲线被它吸引过去的。
下面来看动作脚本,文档类 DrawingCurves.as:
package {
import flash.display.Sprite;
import flash.events.MouseEvent;
public class DrawingCurves extends Sprite {
private var x0:Number = 100;
private var y0:Number = 200;
private var x1:Number;
private var y1:Number;
private var x2:Number = 300;
private var y2:Number = 200;
public function DrawingCurves() {
init();
}
private function init():void {
stage.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
}
private function onMouseMove(event:MouseEvent):void {
x1 = mouseX;
y1 = mouseY;
graphics.clear();
graphics.lineStyle(1);
graphics.moveTo(x0, y0);
graphics.curveTo(x1, y1, x2, y2);
}
}
}
测试这个文件,把鼠标来回移动。这里使用了两个给定的点作为起点和终点,使用鼠标位置作为控制点。请注意,曲线不会真正到达控制点位置,而只到达与控制点一半的位置。
过控制点的曲线
现在,如果想让曲线真正地穿过控制点,那么这就是我们工具箱中的另一个工具。使用下面这个公式计算出控制点的实际位置,这样就可以让曲线穿过指定的点了。同样,以 x0,y0 为起点,以 x2,y2 为终点,x1,y1为控制点,把将要穿过的点叫 xt,yt (目标点)。换言之,如果让曲线穿过 xt,yt点,那么 x1,y1 又需要如何使用呢?公式如下:
x1 = xt * 2 – (x0 + x2) / 2;
y1 = yt * 2 – (y0 + y2) / 2;
只需要把目标点乘以2,然后减去起点与终点的平均值。大家可以画张图来究竟一下它的原理,要么就直接学会使用它。
把公式放在代码中,鼠标坐标用使用 xt,yt,我们只需要改变前一个文档类中的两行,将下面两行:
x1 = mouseX;
y1 = mouseY;
替换为
x1 = mouseX * 2 - (x0 + x2) / 2;
y1 = mouseY * 2 - (y0 + y2) / 2;
或者直接看 CurveThroughPoint.as,现成的文件。