做了一个曲线效果
点这里下载演示效果文件
下面是代码,第一个函数是curveTo的加强版,大家也来试试吧!
//points是控制点的数组,t是精度吗?n是阶(其实就是控制点的个数) function bezier(points, t, n) { var arr = new Array(); for (var i = 0; i<n; i++) { var temp = new Object(); temp.x = points[i].x; temp.y = points[i].y; arr.push(temp); } for (var r = 1; r<n; r++) { for (var i = 0; i<n-r; i++) { arr[i].x = (1-t)*arr[i].x+t*arr[i+1].x; arr[i].y = (1-t)*arr[i].y+t*arr[i+1].y; } } return (arr[0]); } /////////////////////////////////////////////////////////////////////// var points_arr:Array = new Array(); init();
function doMouseDown() { _root.clear(); _root.lineStyle(1, 0x0000ff, 15); for (var i = 0; i<points_arr.length; i++) { if (i == 0) _root.moveTo(points_arr[i].x, points_arr[i].y); _root.lineTo(points_arr[i].x, points_arr[i].y); } _root.lineStyle(1, 0xff0000, 100); n = points_arr.length; k = 5*n; for (var i = 0; i<=k; i++) { var t = i/k; var point = bezier(points_arr, t, n); if (i == 0) _root.moveTo(point.x, point.y); _root.lineTo(point.x, point.y); } if (points_arr.length>20) points_arr = new Array(); } ///////////////////////////////////////////////////////////////////////
function init() { l = new Object(); l.onMouseDown = function() { var point = new Object(); point.x = _xmouse; point.y = _ymouse; points_arr.push(point); if (onEnterFrame != undefined) { delete onEnterFrame; points_arr = new Array(); } }; l.onMouseUp = doMouseDown; Mouse.addListener(l); _root.onEnterFrame = function() { _root.clear(); _root.lineStyle(1, 0xff0000, 100); var point = new Object(); point.x = 500*Math.random(); point.y = 500*Math.random(); points_arr.push(point); _root.lineStyle(1, 0xff0000, 100); doMouseDown(); }; }
(出处:网侠)
|