Flash AS代码实例:仿贝塞尔曲线控制
本文中我们用Flash的AS代码来写一段实例,模仿设计软件中贝塞尔曲线的控制。下面是完成效果:
用鼠标点击拖动灰色的方形锚点,即可看见曲线的变化(小心不要拖出画面了)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() |
复制粘贴到到吗层,测试即可看到效果。原文链接