Я реализовал следующую функцию:
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
Решения там не содержат параметр скорости, а скорее «величину».
Как я могу реализовать переменную скорость, не достигая цели?
(Я пытался просто принимать значения, которые «достаточно близки», но чем больше скорость, тем более высокие различия, которые я должен допускать, которыене получается практически)