Wiele lat temu kodowałem sztuczną inteligencję do budżetowej gry pseudo-3d. Było jedno obliczenie, którego tak naprawdę nigdy nie wymyśliłem najlepszego sposobu, a było to obliczenie, gdzie skończyłby wróg, gdyby teraz się zatrzymał. Na przykład:
- Wróg ma obecnie X = 540,0.
- Wróg porusza się w prawo z prędkością 10 pikseli na klatkę.
- Kiedy wróg chce się zatrzymać, jego prędkość spadnie o 1 piksel na klatkę, aż osiągnie zero.
Czy istnieje prosta formuła, która zapewniłaby mi pozycję, w której wróg kończy się, gdy zostanie całkowicie zatrzymany? Skończyłem wstępnie obliczać i ustalać na stałe przesunięcie, które działało na moje potrzeby, ale musiałoby być obliczane osobno dla wrogów o różnych prędkościach.
źródło
Miałem dokładnie ten sam problem podczas pracy nad grą i zajęło mi wieczność, aby poprawnie wyliczyć matematykę. Oto on:
Przepisane na zwykłą matematykę:
Gdzie w twoim przypadku przyspieszenie wynosi 1, a prędkość liniowa wynosi 10:
EDYTOWAĆ
Wynik i wyjaśnienie Jimmy'ego są poprawne. Moja formuła wymaga dodania połowy prędkości.
lub
źródło
Obliczenia dotyczące zmieniających się prędkości to cały punkt rachunku różniczkowego. Nie robiłem tego od dłuższego czasu, więc nie pamiętam z głowy, ale myślę, że twoja sytuacja po prostu przyjmuje całkę -1 (tj. Spowolnienie).
źródło
Czy to nie jest stały ruch przyspieszający?
Gdzie:
X: ostatnia pozycja
Xi: pozycja początkowa
V: prędkość
t: czas
a: przyspieszenie
Jedyną trudną częścią jest tutaj określenie „t”, ponieważ zwalniamy z przyspieszeniem -1, wtedy możemy obliczyć t = V / a, wtedy t wynosi 10.
więc
Xi: 540
V: 10
t: 10
a: -1
Włóż wszystko:
Formuła pochodzi z integracji integracji przyspieszenia: sprawdź tutaj
źródło