import { Vec2 } from "cc"; //直线移动 export class Line2DMove { private _s:Vec2;//起始点 private _e:Vec2;//终点 private _percentSpeed:number; private _percentAddSpeed:number; private _percent:number;//进度 private _current:Vec2; private _currentDir:Vec2; /** * * @param start_x 起始点 * @param start_y * @param end_x 终点 * @param end_y * @param speed 速度 * @param addSpeed 加速度 */ constructor(start_x:number,start_y:number,end_x:number,end_y:number,speed:number,addSpeed:number){ this._s = new Vec2(start_x,start_y); this._e = new Vec2(end_x,end_y); this._current= new Vec2(start_x,start_y); this._currentDir=new Vec2(this._e.x-this._s.x,this._e.y-this._s.y).normalize(); let dis = (new Vec2(end_x,end_y).subtract2f(start_x,start_y)).length(); this._percent=0; this._percentSpeed= speed/dis; this._percentAddSpeed = addSpeed/dis; } public get target_pos_x():number{ return this._e.x; } public get target_pos_y():number{ return this._e.y; } public get current_dir():Vec2{ return this._currentDir; } public get isEnd():boolean{ return this._percent>=1; } /** * 向目标运动 * @param dt 帧时间 * @param mb 目标点,没有的话为初始定义的点 * @returns */ public MoveTo(dt:number,mb:Vec2=null):Vec2{ this._percentSpeed+=this._percentAddSpeed*dt; this._percent+=this._percentSpeed*dt; let nextpos = this.getPos(this._percent,this._s,mb==null ? this._e:mb); this._current.x=nextpos.x; this._current.y=nextpos.y; return this._current; } /** * 获取进度位置 * @param t 当前时间进度 0-1 * @param a 起点 * @param b 控制点 * @param c 终点 */ private _ab = new Vec2(); private getPos(t:number,a:Vec2,b:Vec2):Vec2{ Vec2.lerp(this._ab,a,b,t); return this._ab; } }