package
{
import flash.display.Sprite;
import flash.events.Event;
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()
{
super();
init();
}
private function init():void
{
this.addEventListener(Event.ENTER_FRAME, onEnterFrame);
}
private function onEnterFrame(e:Event):void
{
x1=mouseX * 2 - (x0 + x2) / 2;
y1=mouseY * 2 - (y0 + y2) / 2;
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;