Poruszanie się / omijanie przeszkód

12

Chciałbym napisać „grę”, w której możesz umieścić przeszkodę (czerwoną), a następnie czarna kropka próbuje jej ominąć i dotrzeć do zielonego celu.
Używam bardzo łatwego sposobu, aby tego uniknąć, jeśli czarna kropka jest blisko czerwonej, zmienia kierunek i porusza się przez chwilę, a następnie przesuwa się do zielonego punktu.
Ścieżka „nierealistyczna”

Jak mogę stworzyć „gładką” ścieżkę dla „odtwarzacza” sterowanego komputerowo?
Edycja: Główną kwestią nie jest gładkość, ale aby uniknąć czerwonej „ściany” blokującej i nie uderzyć w nią, a następnie uniknąć.

Jak mogę zaimplementować algorytm znajdowania ścieżki, jeśli mam w zasadzie 3 punkty?
(A co by to skomplikowało, gdybyś mógł umieścić wiele przeszkód?)
Gładka ścieżka

użytkownik
źródło

Odpowiedzi:

9

Bardzo powszechnym i ogólnym podejściem jest dzielenie przestrzeni świata na siatki i stosowanie algorytmów takich jak A *.

Ten link pomógł mi zacząć rozumieć i wdrażać algorytm A *.

Edytuj :

Prostsza myśl, jaka przychodzi mi do głowy, to ... kiedy już masz świat w komórkach siatki. Zawsze, czy czarna kropka podąża za manhattan do zielonej kropki. Następnie możesz przypisać wagi do każdej komórki. Przeszkody mogą mieć dużą wagę na komórce siatki, a swobodny ruch może (powiedzmy) 0 wagi. W miarę przemieszczania się na dystansie manhattan, dla każdego ruchu sprawdź, czy ciężar następnej komórki nie jest większy niż ciężar bieżącej komórki. Jeśli jest wyższy, sprawdź wagę sąsiedniej komórki, a następnie przejdź dalej.

Mam nadzieję że to pomoże

brainydexter
źródło
Ten artykuł na temat algorytmu A * wydaje się być tym, czego szukałem, ale niestety nadal nie wiem, jak podzielić mój „świat” na siatki: S
użytkownik
To naprawdę zależy. Myśl: podziel swój świat na siatkę o wymiarach 32 x 32, która następnie reprezentowałaby pozycje w układzie 2D. Na przykład w twoim przypadku: czerwona kropka ma 120, 120 pikseli (lub 120/32 x 120/32: 3,75 x 3,75) 3,75 x 3,75 oznacza pozycję na twojej światowej siatce (lub tablicy 2D). Ponieważ tablice są indeksowane według liczb całkowitych, chcesz tylko część całkowitą. Tak więc czerwona kropka byłaby 3 x 3. Mam nadzieję, że to pomoże
brainydexter
18

Zachowania związane z układem kierowniczym zostały opracowane dla tego właśnie zestawu problemów.

http://www.red3d.com/cwr/steer/

Zasadniczo połączyłbyś zachowanie związane z unikaniem przeszkód z prawdopodobnie zachowaniem polegającym na szukaniu lub kontynuowaniu. Na tej stronie jest kilka animacji java różnych zachowań i ich działań. Istnieje kilka implementacji zachowań sterujących typu open source. Tu jest jeden.

Tetrad
źródło
Zachowania kierownicze są do tego idealne.
tenpn
2

Łatwą rzeczą jest wypróbowanie niewidocznej kropki, która wyprzedza czarną kropkę i wykonuje ścieżkę na pierwszym obrazie. Czarna kropka następnie podąża za niewidzialną kropką w niewielkiej odległości z tyłu.
Widziałem tę pracę z dobrymi wynikami, ale oczywiście może nie odpowiadać twoim potrzebom.

Paulo Pinto
źródło