物体沿着曲线运动

  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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值