flash 绘图API 贝塞尔曲线

               

flash 绘图API 贝塞尔曲线

 

 

 今天有点累,不多想写东西,就是当练习。

贝塞尔曲线,也不用多介绍,不过这个东西还有很多没加入去的。今天允许我懒一点。不想解释了。

测试玩玩。具体的没有什么功能,其实还有很多种情况没加入去。等待完善

 

package { //贝塞尔曲线 import flash.display.Sprite; import flash.events.*; import flash.geom.*; public class Main extends Sprite {  private var pen:Sprite=new Sprite();  private var circleA:CirclePoint;  private var circleB:CirclePoint;  private var circleC:CirclePoint;  public function Main()  {   init();  }    //初始化  private function init():void  {   drawGrid(20,30,16,16);//绘制网格   addChild(pen);   pen.graphics.lineStyle(1,0xff0000);   pen.graphics.moveTo(100,300);   pen.graphics.curveTo(100,100,400,10);   circleA=new CirclePoint();   circleA.addEventListener(MouseEvent.MOUSE_DOWN,circle_DragHandler);   addChild(circleA);   circleA.x=100;   circleA.y=300;   circleB=circleA.clone();   circleB.addEventListener(MouseEvent.MOUSE_DOWN,circle_DragHandler);   addChild(circleB);   circleB.x=400;   circleB.y=10;   circleC=circleA.clone();   circleC.addEventListener(MouseEvent.MOUSE_DOWN,circle_DragHandler);   addChild(circleC);   circleC.x=100;   circleC.y=100;   pen.graphics.moveTo(circleA.x,circleA.y);   pen.graphics.lineTo(circleC.x,circleC.y);   pen.graphics.moveTo(circleB.x,circleB.y);   pen.graphics.lineTo(circleC.x,circleC.y);   stage.addEventListener(MouseEvent.MOUSE_UP,onMouseUpHandler);  }     private function circle_DragHandler(event:MouseEvent):void  {   stage.addEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler);   event.currentTarget.startDrag(false,new Rectangle(10,10,460,300));//控制拖动区间  }  private function onMouseMoveHandler(event:MouseEvent):void  {   redraw();  }  private function onMouseUpHandler(event:MouseEvent):void  {   stage.removeEventListener(MouseEvent.MOUSE_MOVE,onMouseMoveHandler);   circleA.stopDrag();   circleB.stopDrag();  }    //重绘  private function redraw():void  {   pen.graphics.clear();   pen.graphics.lineStyle(1,0xff0000);   pen.graphics.moveTo(circleA.x,circleA.y);   pen.graphics.curveTo(circleC.x,circleC.y,circleB.x,circleB.y);   pen.graphics.moveTo(circleA.x,circleA.y);   pen.graphics.lineTo(circleC.x,circleC.y);   pen.graphics.moveTo(circleB.x,circleB.y);   pen.graphics.lineTo(circleC.x,circleC.y);  }  //绘制网格  private function drawGrid(rows :int,cols:int,titleW:int,titleH:int):void  {          this.graphics.lineStyle(1,0xffffff,0.2);    for (var i:int=0; i<rows; i++)   {    for (var j:int=0; j<cols ; j++)    {           this.graphics.drawRect(j*titleW,i*titleH,titleW,titleH);//绘制矩形    }   }  }   }}//创建点类import flash.display.Sprite;internal class CirclePoint extends Sprite{ public function CirclePoint(R:int=8) {  this.graphics.lineStyle(0);  this.graphics.beginFill(0xffffff);  this.graphics.drawCircle(0,0,R);  this.graphics.endFill(); } public function clone():CirclePoint {  return new CirclePoint(); } public function move(x:Number,y:Number):void {  this.x=x;  this.y=y; }}

 

 

 

 随后,我们添加一个输出代码的功能。看看效果如何?通过记录我们三个点的位置,从而看到更改坐标后,就可以得到我们所想的图形

 

 flash 绘图API 贝塞尔曲线

 

添加一个输出代码的功能

 

  //输出文本  private function Printf():String  {   var codeMsg:String;   codeMsg="this.graphics.lineStyle(1,0xff0000);"+"/n"           +"this.graphics.moveTo("+circleA.x+","+circleA.y+");"+"/n"     +"this.graphics.curveTo("+circleC.x+","+circleC.y+","+circleB.x+","+circleB.y+");";         return codeMsg;       }

 

初始化文本。并看看输出的情况如何。

 

在init()函数里面添加里面的函数。则可以看到输出的面板

并且初始化文本,指定他们的坐标,背景,宽度高度等

//输出文本   private function initTextArea():void   {      textArea=new TextField();   textArea.textColor=0x000000;   addChild(textArea);   textArea.border=true;   textArea.background=true;   textArea.x=0;   textArea.y=330;   textArea.width=480;   textArea.height=100;   textArea.wordWrap=true;   textArea.text=Printf();  }  

 

 

 

 

扩展,贝塞尔曲线有两次,三次和四次等,而现在这种曲线应用很广泛了。对于flash而言使用了它一部分的已经可以扩展很多话题。有兴趣可以到wonderfl 哪里观看,这方面使用,相信精彩会在后面。

 

 

 

 

 

 

           

再分享一下我老师大神的人工智能教程吧。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow