export function CreateBezierPoints(anchorpoints, pointsAmount): Array<any>
{
let multiPointBezier = () => { }
var points = [];
for (var i = 0; i < pointsAmount; i++)
{
var point = this.MultiPointBezier(anchorpoints, i / pointsAmount);
points.push(point);
}
return points;
}
export function MultiPointBezier(points, t): any
{
let len: number = points.length;
let x: number = 0, y: number = 0;
for (let i: number = 0; i < len; i++)
{
let point: any = points[i];
x += point.x * Math.pow((1 - t), (len - 1 - i)) * Math.pow(t, i) * (this.erxiangshi(len - 1, i));
y += point.y * Math.pow((1 - t), (len - 1 - i)) * Math.pow(t, i) * (this.erxiangshi(len - 1, i));
}
return { x: x, y: y };
}
export function erxiangshi(start: number, end: number): number
{
let cs: number = 1, bcs: number = 1;
while (end > 0)
{
cs *= start;
bcs *= end;
start--;
end--;
}
return (cs / bcs);
};
```使用方法
```Ts
let sp = new Sprite();
this.UIPanel.addChild(sp);
//画圆
sp.graphics.drawCircle(0, 0, 10, "#ff0000");
let points = []
let point1 = new Laya.Point(250, 0) // 起点
let point2 = new Laya.Point(500, 0)//一个顶点 还可以继续添加 点
let point3 = new Laya.Point(500, 500)//一个顶点 还可以继续添加 点
let point4 = new Laya.Point(250, 500)//一个顶点 还可以继续添加 点
let point5 = new Laya.Point(0, 500)//终点
let point6 = new Laya.Point(0, 0)//终点
let point7 = new Laya.Point(250, 0)//终点
points.push(point1)
points.push(point2)
points.push(point3)
points.push(point4)
points.push(point5)
points.push(point6)
points.push(point7)
let poin = this.CreateBezierPoints(points, 500);
let i = 0;
let aaa = () =>
{
Laya.Tween.to(sp, { x: poin[i].x, y: poin[i].y }, 5, null, Laya.Handler.create(this, () =>
{
i++;
if (i < poin.length)
aaa();
}))
}
aaa();
原文
https://blog.csdn.net/nicepainkiller/article/details/91390452