飞机大战,其中的追踪导弹怎么做,要曲线运动,直线的已成为,但是效果看起来不太好,有没有大佬有思路的
update中若干帧调整子弹的方向,子弹沿着调整好的方向移动
将方向向量(normalize)用 lerp(dir, t) 逐渐调整,快迫近的时候设置t=1,或者两点距离小于某个值就算碰撞
我太菜了可能,没看懂
是调整了,追踪是实现了,但是看起来是直线,效果不太好
可以参考捕鱼子弹 很多的
public update(dt: number) {
let a = this.node.position;
let b = this._target.position; // 目标坐标
let direction = cc.Vec3.subtract(this._v3, b, a);
let radian = Math.atan2(direction .y, direction .x);
let radius = this._moveSpeed * dt;
let x = Math.cos(radian) * radius;
let y = Math.sin(radian) * radius;
this.node.x += x;
this.node.y += y;
this.node.angle = cc.math.toDegree(radian);
}
这种?
哪里有代码
搜麒麟子大佬有些过。。
这种不行,我一开始实现的就是这样的,直线追踪,没有弧度
我为此做过一个教程,因为我之前是开发塔防的需要用到跟踪导弹
https://www.bilibili.com/video/BV1FE411G7wg/?spm_id_from=333.999.0.0
不过视频做的比较菜,如果有意的话可以看看。
不知道是不是你想要的效果
很久之前录的了。。
不要每帧直接把角度设置为自己与目标的方向,角度变化有个速度,比如说每秒修正10度,这样表现出来的应该就不会是直线了
在弧度计算上,用lerp加一个线性插值不久行了?
let radian = Math.atan2(direct.y, direct.x) - cc.math.lerp(偏移弧度, 0, 执行时长 / 总时长);
比如:
this._lifeStamp += dt;
let radian = Math.atan2(direct.y, direct.x) - cc.math.lerp(this._angularSpeed, 0, this._lifeStamp / this._lifeTime);
这也没有办法知道执行时长

不是这种弧线追踪吗?
差不多了,很相似了,请问你是怎么实现的,我是飞机是实时的不知道具体执行时间

这个我研究了好久,始终没有明白
我重新编辑了下, 之前可能有点绕。
![]()
lerp里的参数可以根据自己想要的效果调整
哈哈哈哈,我研究出来一点味道了
