Najbardziej zaawansowane gry, które stworzyłem, to gra w bilard z 8 piłkami wykonana za pomocą silnika fizyki Box2dFlashAS3 oraz gra platformowa z poziomami.
Kiedy tworzyłem gry platformowe, zawsze chciałem wiedzieć, jak stworzyć silnik, aby móc go ponownie używać. Kiedy widzę gry, które mają stoki, zakrzywione stoki, idealną grawitację i rzeczywistą fizykę, zawsze żałowałem, że nie umiem kodować silnika.
Proszę sugerować techniki i artykuły dla potrzebnej odpowiedniej bazy wiedzy.
architecture
physics
physics-engine
Wisznu
źródło
źródło
Odpowiedzi:
A ja polecam przeciwko toczenia własny silnik fizyki do niczego innego niż doświadczenie robi (tylko uświadomić sobie, że prawdopodobnie należy go wyrzucić, gdy skończysz - jest to naprawdę trudne, aby uzyskać wszystkie edgecases i limitu numerycznej / problemy ze stabilnością załatwione , a Twój czas może być znacznie lepiej wykorzystany przez wkład w istniejący silnik), oto kilka zasobów:
Lekcje Hall Pool: szybkie, dokładne wykrywanie kolizji między kołami lub sferami omawia kolizję koła / koła i kuli / kuli.
Do N Poradniki są wspaniałe dla podstawowego zrozumienia wykrywania i reagowania oddzielania Axis Twierdzenie opartej.
źródło
Erin Catto prowadzi wszystkie wykłady GDC na temat implementacji Box2D online. Z mojego doświadczenia, Box2D ma również prosty kod do odczytania.
źródło
Oto jak możesz to zrobić:
Przybliżenie ruchu
Każdy obiekt fizyki potrzebuje tych wektorów:
Tak więc, intuicyjnie, musisz zrobić coś takiego w każdej klatce dla każdego obiektu fizyki
a
: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:
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.
źródło
Myślę, że to może być przydatne: http://gafferongames.com/game-physics/integration-basics/
źródło
Prawdopodobnie najbardziej wszechstronny zasób w stylu samouczka:
http://www.wildbunny.co.uk/blog/2011/04/06/physics-engines-for-dummies/
Zobacz także powiązane artykuły z tego samego bloga:
http: // www.wildbunny.co.uk/blog/2011/04/20/collision-detection-for-dummies/
http://www.wildbunny.co.uk/blog/2011/03/25/speculative-contacts-an- silnik z kolizją ciągłą-podejście-część-1 /
źródło
Najlepsze zasoby do nauki fizyki gier, z jakimi się kiedykolwiek spotkałem, to Chris Hecker ze sławy „Spy Party”:
http://chrishecker.com/Rigid_Body_Dynamics
źródło