Oto jak możesz to zrobić:
Przybliżenie ruchu
Każdy obiekt fizyki potrzebuje tych wektorów:
- Pozycja : gdzie znajduje się obiekt.
- Szybkość : jak zmienia się jego pozycja.
- Przyspieszenie : jak zmienia się jego prędkość.
Tak więc, intuicyjnie, musisz zrobić coś takiego w każdej klatce dla każdego obiektu fizyki a
:
a.speed += a.acceleration
a.position += a.speed
Pułapki : jest to metoda integracji Eulera . To przybliżenie jest lepsze w przypadku małych prędkości i przyspieszeń oraz małych kroków czasowych. W grze jest to zwykle prawdą. Ale jeśli obiekt porusza się naprawdę szybko w kierunku cienkiej ściany lub bezpośrednio w kierunku innego poruszającego się obiektu, może on pominąć kolizję z tym obiektem, gdy jego położenie zostanie zwiększone o wystarczająco dużą wartość, aby go całkowicie przekroczyć. Jeśli masz szybko poruszające się obiekty, możesz potrzebować Ciągłego Wykrywania Kolizji, aby to zrobić.
Kolizja
Kolizję można aproksymować za pomocą tego rodzaju sekwencji:
- Wykrywanie : Wykrywa się, że przecinają się dwa ciała.
- Rozdzielczość : Pozycja każdego ciała jest zmieniana, aby już się nie przecinały.
- Fizyka : Prędkość każdego ciała zmienia się w celu uwzględnienia pędu, tarcia i restytucji (sprężystości).
Jest to znane jako dyskretne wykrywanie kolizji, ponieważ dzieje się to w dyskretnych punktach czasu. Każdy krok zasługuje na uwagę:
Krok 1: Wykrywanie kolizji (czy coś się koliduje?)
Dla dwóch kół : Sprawdź, czy ich środki są większe niż suma ich promieni od siebie.
Dla dwóch prostokątów : Sprawdź, czy którakolwiek z ich współrzędnych narożnych znajduje się w drugim prostokącie.
Do wszystkiego, co dotyczy bardziej złożonych wielokątów , potrzebujesz twierdzenia o osi oddzielającej , które jest tematem na inne pytanie.
Pułapki : Istnieje naprawdę wiele innych rodzajów kolizji , które warto rozważyć. Niektóre są bardzo złożone: wypukłe wielokąty mogą się przecinać wiele razy !
Krok 2: Rozwiązanie kolizji (rozsuwanie ich).
Prostą metodą rozwiązania kolizji jest translacja przy minimalnej penetracji , z wykorzystaniem wartości uzyskanych z detekcji kolizji. Zasadniczo obejmuje to odsunięcie obiektów od siebie przy minimalnej możliwej odległości ruchu.
Jako przykład rozważ kolizję koło-okrąg, w której jedno z kół jest ustalone na miejscu. Wektor minimalnego przemieszczenia ma ten sam kierunek, co różnica między wektorami środkowymi. Jego długość jest różnicą między sumą ich promieni a odległością między środkami.
Ten pomysł łatwo uogólnia na inne kształty.
Pułapki : jeśli oba zderzające się obiekty są ruchome, może być konieczne przesunięcie ich o ułamek całkowitej odległości, aby uzyskać wiarygodne przybliżenie ich ruchu. Oczywiście będą musieli poruszać się w różnych kierunkach.
Krok 3: Fizyka zderzeń (inne zmiany).
Najbardziej oczywistą rzeczą, która ma miejsce, jest to, że jeden lub dwa obiekty zmieniają kierunek, tj. Obracają wektor prędkości. Jest to dość łatwe do wdrożenia.
Pułapki : obiekty mogą być elastyczne , ale mogą nie być , w takim przypadku całkowita energia w systemie jest zmniejszona. Możesz potrzebować oporu z powodu oporu powietrza. Tarcie (szczególnie tarcie statyczne ) jest niezwykle skomplikowane w realizacji .
Kilka wniosków
Symulacja rzeczywistości jest wykładniczo trudniejsza, tym bardziej, jeśli chcesz ją symulować. Wchodzisz na pole minowe niezliczonych skrzyń, niesamowicie trudnych receptur i wciąż rosnących stosów dokumentów badawczych.
Jeśli Twoje potrzeby są proste lub chcesz się uczyć, spróbuj.
Jeśli Twoje potrzeby są złożone lub nie lubisz matematyki, poproś silnik fizyki, aby pomalował szczegóły za Ciebie. Box2D i Bullet są dość popularne w grach.