简单实现AS绘制贝塞尔曲线

  • 来源: 中国IT实验室 作者: somesun   2008-03-18/11:55
  • 看看效果吧:


    AS如下:
    //这个函数是用来绘制线条的
    function connect(){
    this.clear()
    this.lineStyle(3,0x660000,100)
    this.moveTo(anchorOne._x,anchorOne._y)
    this.curveTo(controlOne._x,controlOne._y,anchorTwo._x,anchorTwo._y)
    updateAfterEvent()
    }
    //这个函数是用来绘制替代描点跟控制点的MC,就绘制一个正方形吧
    function createSquare(handle,side,offset){
    if(offset==undefines){
      offset=0
    }
    with(handle){
      moveTo(offset,offset)
      lineTo(offset,side)
      lineTo(side,side)
      lineTo(side,offset)
      lineTo(offset,offset)
      endFill()
    }
    }
    //这是用来控制描点跟控制点的移动,并且用延时,间隔一段时间调用一次绘制线条
    function setDraggable(handle){
    handle.onPress=function(){
      clearInterval(_global.refreshScreen)
      _global.refreshScreen=setInterval(this._parent,"connect",10)
      this.startDrag(false)
    }
    handle.onRelease=function(){
      clearInterval(_global.refreshScreen)
      this.stopDrag()
    }
    handle.onReleaseOutside=function(){
      clearInterval(_global.refreshScreen)
      this.stopDrag()
    }
    }
    //建立描点
    anchorOne=createEmptyMovieClip("anchorPoint1",this.getNextHighestDepth())
    anchorOne._x=anchorOne._y=50
    //填充
    anchorOne.beginFill(0xcccccc,100)
    //样式
    anchorOne.lineStyle(0,0x000000,100,false,false,"none","miter",2)
    //调用函数绘制成正方形
    createSquare(anchorOne,8,-8)
    //调用后方可拖动
    setDraggable(anchorOne)
    //另一个描点
    anchorTwo=createEmptyMovieClip("anchorPoint2",this.getNextHighestDepth())
    anchorTwo._x=anchorTwo._y=250
    anchorTwo.beginFill(0xcccccc,100)
    anchorTwo.lineStyle(0,0x000000,100,false,false,"none","miter",2)
    createSquare(anchorTwo,8,-8)
    setDraggable(anchorTwo)
    //控制点
    controlOne=createEmptyMovieClip("control1",this.getNextHighestDepth())
    controlOne._x=anchorTwo._x
    controlOne._y=anchorOne._y
    controlOne.beginFill(0xcccccc,100)
    controlOne.lineStyle(0,0x000000,100,false,false,"none","miter",2)
    createSquare(controlOne,8,-8)
    setDraggable(controlOne)
    //最后让线条一开始就显示出来
    connect()
    复制粘贴就有效果

    评论 {{userinfo.comments}}

    {{money}}

    {{question.question}}

    A {{question.A}}
    B {{question.B}}
    C {{question.C}}
    D {{question.D}}
    提交

    驱动号 更多