Egret使用Tween动画实现二次贝塞尔运动/抛物线运动


//需求为实现对象沿line3轨迹运动
private addLine() {
    //为方便调试,先把三条线画出来
    let line1 = new egret.Shape()
    line1.graphics.lineStyle(5,0x87CEFA);
    line1.graphics.moveTo(this.objectPoint.x, this.objectPoint.y - this.objectWH);	//起点
    line1.graphics.lineTo(this.highX, this.highY);
    line1.graphics.lineTo(this.highX*2 - this.objectPoint.x, this.stageH- this.objectWH);
    line1.graphics.endFill();
    this.addChild(line1);

    let line2 = new egret.Shape()
    line2.graphics.lineStyle(1,0x00868B);
    line2.graphics.moveTo(this.objectPoint.x, this.objectPoint.y - this.objectWH);	//起点
    line2.graphics.curveTo(this.highX, this.highY, this.highX*2 - this.objectPoint.x, this.stageH- this.objectWH);	//控制点,终点
    line2.graphics.endFill();
    this.addChild(line2);

    //line2为真实贝塞尔曲线轨迹,但是因为最高点过低而导致运动效果不太好,所以我们修改控制点的Y值,来打到较好的效果
    let line3 = new egret.Shape()
    line3.graphics.lineStyle(1,0x4B0082);
    line3.graphics.moveTo(this.objectPoint.x, this.objectPoint.y - this.objectWH);	//起点
    line3.graphics.curveTo(this.highX, this.highY-300, this.highX*2 - this.objectPoint.x, this.stageH- this.objectWH);	//控制点,终点
    line3.graphics.endFill();
    this.addChild(line3);


    //在1秒内,this的factor属性将会缓慢趋近1这个值,这里的factor就是曲线中的t属性,它是从0到1的闭区间。
    egret.Tween.get(this).to({factor: 1}, 1000);
}

//添加factor的set,get方法,注意用public
public get factor():number {
    return 0;
}

//利用egret的缓动动画Tween来实现动画
//二次方贝塞尔公式 (1 - t)^2 P0 + 2 t (1 - t) P1 + t^2 P2
//起点P0  控制点P1  终点P2
public set factor(value:number) {
    this.mainObject.x = (1 - value) * (1 - value) * this.objectPoint.x + 2 * value * (1 - value) * this.highX + value * value * (this.highX*2 - this.objectPoint.x);
    this.mainObject.y = (1 - value) * (1 - value) * (this.objectPoint.y - this.objectWH) + 2 * value * (1 - value) * (this.highY-300) + value * value * (this.stageH- this.objectWH);
}




  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值