gpt4 book ai didi

javascript - 将 "speed"添加到 "MoveTowards(start, target)"函数

转载 作者:行者123 更新时间:2023-12-01 01:58:07 27 4
gpt4 key购买 nike

我实现了以下功能:

function moveTowards(start, target, speed) {
if (Math.abs(target.x - start.x) < config.COLLISION_RADIUS
&& Math.abs(target.y - start.y) < config.COLLISION_RADIUS) {
return target
}
const newX = target.x - start.x
const newY = target.y - start.y
const angle = Math.atan2(newY, newX)
const x = speed * Math.cos(angle)
const y = speed * Math.sin(angle)

return {
x: start.x + x,
y: start.y + y
}
}

预计会在游戏更新循环中调用并返回一个缓慢移向目标位置的位置。

它工作正常,但是当我设置大于 1 的速度时,该函数实际上从未达到目标位置,而是返回目标周围区域中的位置。

我从这里得到了数学:https://stackoverflow.com/a/20762210/5547718

那里的解决方案不包含速度参数,而是包含“幅度”。

如何实现变速而不到达目标?

(我尝试只接受“足够接近”的值,但速度越大,我必须容忍的差异就越大,这在实践中行不通)

最佳答案

您的代码每帧都会进行大量不必要的计算。例如,您应该只进行以下计算:

const angle = Math.atan2(newY, newX);
const x = speed * Math.cos(angle);
const y = speed * Math.sin(angle);

在运动开始时完成一次,而不是每一帧(帧之间的 Angular 不会改变)。

但是,您可以在每一帧中检查从起点到目标的距离是否小于预计的速度距离,在这种情况下,只需将对象放置在目标位置即可。

if (newX <= x && newY <= y) {
return target;
}

关于javascript - 将 "speed"添加到 "MoveTowards(start, target)"函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50840424/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com