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
стан?