cocos creator 模拟纸飞机运动动画

模拟纸飞机运动动画 PaperPlaneAnim

项目需要模拟一个纸飞机飞到目的地的动画,用cocos的moveto动画不能满足需求,因为纸飞机总是向着飞机头朝向移动。

所以需要考虑飞机头的朝向,计算目标点和飞机的夹角,飞机前进的过程中按转向角速度this.angularSpeed修改飞机的角度angle
fly函数 传入飞机的目的地位置targetPos,初始化数据

public fly(targetPos: cc.Vec2, cb?: () => void, circleAngle?) {
        this._targetCallBack = cb;
        targetPos = this.flyNd.parent.convertToNodeSpaceAR(targetPos);
        this._targetPos = targetPos;
        this._speed = 0;
        this._circleAngleCnt = 0;
        this._circleFactor = 0;
        this.circleAngle = circleAngle == null ? this.circleAngle : circleAngle;
        this._flyStatus = FlyStatus.AccCircle;
}

update里根据飞机的位置this.flyNd.positiontargetPos计算得到夹角this._targetAngle

//计算目标位置在飞机的方位。

let radian = Math.atan2(this.flyNd.y - this._targetPos.y, this.flyNd.x - this._targetPos.x);
this._targetAngle = 180 / Math.PI * radian;
this._targetAngle = (360 + this._targetAngle) % 360;

计算飞机当前角度 curAngle 并计算curAnglethis._targetAngle的差diffAngle

let curAngle = (360 + (this.flyNd.angle + this.defaultPlaneAngleOffset) % 360) % 360;
let diffAngle = this._targetAngle - curAngle;

根据设置的角速度angularSpeed修改飞机的角度

            if (Math.abs(diffAngle) > 1) {
                let factorAngle = this._targetAngle - curAngle > 0 ? 1 : -1;
                if (Math.abs(this._targetAngle - curAngle) > 180) {
                    factorAngle *= -1;
                }
                this.flyNd.angle += factorAngle * this.angularSpeed;
            }

飞机总是向着飞机头的方向前进,根据飞机角度curAngle

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值