Tworzę grę we Flashu i potrzebuję pomocy. Można to uznać za problem matematyczny.
Mój obiekt leci z prędkością, X
a mój obiekt może zderzyć się z kamieniami. Kiedy zderzy się z kamieniem, potrzebuję, aby mój obiekt złamał kamień i kontynuował, ale z mniejszą prędkością. Łatwo jest go na stałe napisać i napisać coś takiego:, myVelocity -= 10;
ale moim głównym problemem jest to, że chcę, aby tracił mniejszą prędkość, im wyższa jest prędkość początkowa.
Na przykład: jeśli prędkość wynosi 300, chcę, aby straciła 10, a jeśli wynosiła 200, chcę, aby straciła 20.
Czy można to zrobić za pomocą jakiejś formuły?
mathematics
physics
Afra
źródło
źródło
log(myVelocity + 1) * N
?Odpowiedzi:
Chciałbym odwrócić prędkość i pomnożyć przez coś, co lubisz:
Ten przykład daje następujące efekty:
źródło
system, który ty i inni opisacie, nie wygeneruje naprawdę wyglądającej fizyki. główną formułą jest zmniejszenie 0,5 * m * v ^ 2 (energia kinematyczna) o stałą wartość za każdym razem, gdy obiekt gdzieś trafi.
więc jeśli obiekt o wadze 2 kg trafi w jakiś blok, który potrzebuje 16 j energii, zanim się zepsuje: prędkość ruchu obiektu zmieni się zgodnie z poniższą tabelą:
źródło
Tak naprawdę nie podałeś wystarczającej ilości informacji, aby powiedzieć, jaki zakres chcesz, tj. Czy jest on ograniczony, czy chcesz progresję geometryczną itp.
Pierwszą rzeczą, którą chcesz zrobić, jest wyprowadzenie liczby proporcjonalnej do prędkości, którą chcesz stracić (nie musi być taka sama, ale powinna się zmniejszać wraz ze wzrostem prędkości, aby była proporcjonalna do straty). Standardowym sposobem na to jest odwzajemnienie :
Teraz za 100 będziesz mieć 0,01, za 200 będziesz mieć 0,005, za 300 będziesz mieć 0,0033 i tak dalej.
Teraz wystarczy dopasować tę liczbę do tego, czego naprawdę chcesz, mnożąc ją. Więc
da ci 20 za 300, ale da ci 15 za 200 zamiast 10. To może być dla ciebie w porządku, w takim przypadku nie musisz czytać dalej. Możesz dopasować k, jak chcesz, ale możesz nie otrzymywać liczb tak, jak lubisz, chyba że zrobisz trochę więcej, na przykład zastosujesz postęp geometryczny lub zmienisz podstawę wzrostu. Nie zamierzam wchodzić tutaj w postępy geometryczne, ale jeśli chcesz zmienić bazę, wykonaj następujące czynności:
Zapewni to zakres, o który pierwotnie prosiłeś w swoim pytaniu, 300 -> utrata 10, 200 -> utrata 20. FYI 100 -> utrata 40, i 50 -> utrata 80 (!), Co oznacza, że musiałbym ograniczyć odejmowanie - co zrobiłem w wierszach (1) i (2).
Istnieją oczywiście inne sposoby podejścia do tego problemu, które z pewnością napiszą tutaj bardziej biegli matematycznie niż ja.
źródło
Myślę, że można użyć prostego podziału według prędkości. Na przykład: lost = 3 000 / myVelocity. Gdy prędkość wynosi 300, tracisz 10, a gdy wynosi 200, tracisz 15. To od Ciebie zależy, czy wybierzesz prawidłowe stałe.
Jeśli chcesz, możesz użyć bardziej złożonej formuły, takiej jak: stała / (stała2 * prędkość ^ 2 + stała3 * prędkość). Znowu - po prostu wybierz stałe, które ci odpowiadają.
źródło