Szukam pomysłów, jak wdrożyć śledzenie w przestrzeni 2D. Niestety nie wiem jeszcze dużo o AI / wyszukiwaniu ścieżek / autonomicznej kontroli.
Powiedzmy, że ten statek może się swobodnie poruszać, ale ma masę i pęd. Mogą na to również wpływać siły zewnętrzne (wybuchy itp.). Gracz może w dowolnym momencie ustawić cel dla statku, który powinien dotrzeć do tego miejsca i się zatrzymać.
Bez fizyki byłoby to proste, wystarczy wskazać kierunek i iść. Ale jak poradzić sobie z istniejącym rozmachem, a następnie zatrzymać się na miejscu? Nie chcę bezpośrednio modyfikować umiejscowienia statku.
edytuj: Żeby było jasne, matematyka związana z fizyką samego statku nie stanowi problemu.
physics
ai
path-finding
movement
Petteri Hietavirta
źródło
źródło
Odpowiedzi:
Zobacz zachowania kierownicze . Szczególnie poszukiwanie i przybycie może być interesujące dla twoich potrzeb. Zachowania te będą również działać, gdy niektóre inne wpływy, takie jak eksplozja, tymczasowo zmieniają pozycję statku.
źródło
Nie jest łatwo rozwiązać problem dokładnie. Masz dwie możliwości, chociaż specyfika każdego rozwiązania jest różna:
Rozwiązanie matematyczne. Jeśli twój system fizyki jest wystarczająco prosty, możesz utworzyć zamkniętą formę dla swojego ruchu i obliczyć, kiedy musisz zacząć przyłożyć siłę hamowania, aby zatrzymać się w pewnym momencie. Jeśli twoja siła hamowania jest stała i nie masz oporu powietrza, powinno to rozkładać się do kwadratu.
Cesarskie rozwiązanie. Możesz użyć ręcznie dostrojonego kontrolera PID lub faktycznie rejestrować drogi hamowania dla swojego statku w systemie fizyki: na stanowisku testowym zahamuj statek od maksymalnej prędkości do zatrzymania, rejestrując przebytą odległość i prędkość co najmniejszą przerwę czasową. Przechowuj wynikowy wykres odległości / prędkości w katalogu danych.
W czasie wykonywania zrekonstruuj wykres i podłącz aktualną prędkość i prędkość docelową, aby pokonać dystans. W tej odległości od punktu docelowego musisz być w pełni zahamowany.
Zaletą tego podejścia jest to, że można go używać do hamowania dokładnie przy dowolnej prędkości. Wadą jest to, że jeśli twoje hamulce muszą się włączać lub wyłączać, nigdy nie będziesz dokładnie na zakręcie.
źródło
Jak powiedziano wcześniej, ta sytuacja jest idealna do sterowania zachowaniami, ale chciałbym ją nieco rozszerzyć. Zachowanie Przyjazd byłoby idealne dla tego scenariusza. Możesz także wziąć pod uwagę przeszkody. Tutaj możesz również skorzystać z zachowania unikania przeszkód.
Niestety, http://www.red3d.com/cwr/steer/ nie zapewnia kodu źródłowego dla tych zachowań. Jednak programowanie sztucznej inteligencji gry według przykładów wyjaśnia i wyjaśnia zachowania w łatwych do zrozumienia fragmentach. Jeśli nie możesz dostać książki, zawsze możesz pobrać kod źródłowy tutaj: http://www.wordware.com/files/ai/
Ponadto, jeśli chcesz rozszerzyć swój ruch o wyszukiwanie ścieżek, możesz mieć klasę pathfinder, która oblicza ścieżkę (być może jako zbiór wektorów 2D) i użyć zachowania kierowania Ścieżka śledzenia, aby dodać to również do miksu.
Kod źródłowy, z którym się powiązałem, udostępnia również trzy różne metody łączenia tych zachowań sterujących razem.
Mam nadzieję, że to pomaga.
źródło
Kierowanie w kierunku pozycji nie jest zbyt trudne, ale osobiście zmagałem się przez chwilę z problemem kierowania w kierunku pozycji i osiągania jej z określoną prędkością lub podążania ścieżką z ograniczeniami prędkości.
Rozwiązałem problem za pomocą krzywej Hermite . Ustaw p0 i m0 na pozycję i prędkości statku, p1 i m1 na pozycję docelową i prędkości. Zakłada się, że chcesz, aby statek podążał sekundę za celem. Oblicz drugą pochodną p (0), która da ci przyspieszenie do zastosowania na twoim statku.
Oto kod drugiej pochodnej (w F #, mam nadzieję, że możesz dostosować ją do swojego wybranego języka; sq () oblicza kwadrat, pojedyncze cudzysłowy nie są interpretowane jako cudzysłowy, ale jako znaki, są one częścią identyfikatora):
Pamiętaj, że jeśli na twój statek działają siły zewnętrzne (np. Grawitacja z planet), będziesz musiał wziąć to pod uwagę przy obliczaniu ciągu z przyspieszenia.
źródło
Znalazłem to niedawno - zachowania sterujące w JavaScript i przetwarzaniu:
http://shawnldoria.com/works/steering-behaviors.html
źródło
Myślę, że twój statek powinien mieć parametry takie jak: pozycja i prędkość.
Prędkość jest sumą wszystkich sił (takich jak grawitacja, eksplozje, dane wejściowe użytkownika itp.) W każdej ramce, a także może mieć pewien rodzaj wilgoci.
Pozycja jest obliczana na podstawie ostatniej pozycji plus prędkość * time_step.
Jednak z tym może być trudno wdrożyć zatrzymanie na celu.
źródło