LERP - линейная интерполяция
Я дал этот ответ для аналогичной проблемы несколько дней назад, но здесь мы идем:
Линейная интерполяция - это функция, которая дает вам число между двумя числами, основываясь на прогрессе. На самом деле вы могли бы получить точку между двумя точками.
Великая формула - как рассчитать
Общая формула LERP определяется как pu = p0 + (p1 - p0) * u
. Куда:
- pu: номер результата
- p0: начальный номер
- p1: окончательный номер
- U: прогресс. Это дано в процентах, между 0 и 1.
Как получить проценты
Вы можете спросить: «Как я могу получить этот процент !?». Не беспокойся Это примерно так: сколько времени займет точка, чтобы пройти вектор начала до конца? Хорошо, разделите это на время, которое уже прошло. Это даст вам процент.
Смотри, как то так: percentage = currentTime / finalTime;
Расчет векторов
Чтобы получить результирующий вектор, все, что вам нужно сделать, это применить формулу два раза, один для компонента X и один для компонента Y. Что-то вроде этого:
point.x = start.x + (final.x - start.x) * progress;
point.y = start.y + (final.y - start.y) * progress;
Расчет времени изменения
Возможно, вы хотите, чтобы ваши очки путешествовали со скоростью 0,5 балла, да? Так скажем, чем больше расстояние, тем больше будет пройдено.
Вы можете сделать это следующим образом:
Получить длину расстояния Для этого вам понадобятся две вещи. Получите вектор расстояния, затем преобразуйте его в значение длины.
distancevec = final - start;
distance = distancevec.length();
Я надеюсь, вы знаете векторы по математике. Если вы этого не сделаете, вы можете рассчитать длину вектора по этой формуле d = sqrt(pow(v.x, 2) + pow(v.y, 2));
.
Получите время, которое потребуется, и обновите последнее время. Это легко. Поскольку вы хотите, чтобы на каждый тик вы получали 0,5 длины, нам просто нужно разделить и получить, сколько тиков мы получили.
finalTime = distance / 0.5f;
Выполнено.
ВНИМАНИЕ: Может быть, это не та скорость, на которую вы рассчитывали, но это правильно. так что у вас есть линейное движение, даже на диагональных ходах. Если вы хотите сделать x + = 0.5f, y + = 0.5f, то прочитайте книгу векторной математики и перепроверьте свои планы.
goal_dist
в виду в своемif
состоянии?