Zamknięty przez: Neoqueto 29-05-2012, 15:48 |
[teoria] Wyszukiwanie ścieżki |
Autor |
Wiadomość |
Dexter
Plutonowy
 
Główny edytor: 
Drugi edytor: 
Pojedynki: tak
Posty: 61
650 Prestiż
|
Wysłany: 29-02-2012, 00:19 [teoria] Wyszukiwanie ścieżki
|
|
|
Hej,
mam pytanie czysto teoretyczne - nie chodzi mi o zdarzenia, a po prostu o samą zasadę działania. Starałem się to rozpracować, ale jakoś nic mi nie przychodzi do głowy.
Powiedzcie mi na jakiej zasadzie działa AI, które tworzy ścieżkę ruchu w kierunku gracza. Co mam na myśli - mamy pomieszczenie, w którym jest gracz, dwa pomieszczenia dalej znajduje się przeciwnik, jeżeli zbliżymy się do niego wystarczająco (z tym nie ma problemu, przekątna prostokątu o bokach z różnicy współrzędnych) zaczyna podążać w naszym kierunku najbliższą drogą omijając po drodze wszystkie przeszkody i idąc w kierunku gracza.
Na tej samej zasadzie chodzą jednostki w grach RTS - klikamy w jedno miejsce, a one omijają przeszkody i zbliżają się do wskazanego punktu. Chodzi mi dokładnie o zasadę działania takiego cudu.
Mam nadzieję, że napisałem wszystko w miarę czytelnie.
Z góry dzięki za odpowiedzi.
Pozdrawiam
Dexter |
_________________ Tenshi no metsuki... |
|
|
|
 |
Andrzejek98
Plutonowy

Główny edytor: 
Pomógł: 3 razy Posty: 74
1163 Prestiż
|
Wysłany: 29-02-2012, 00:46
|
|
|
Po prostu przeciwnik podąża za nami sprawdzając czy na jego polu widzenia znajduje się jakiś obiekt do którego może dobić, jeśli tak >> omiń.
Prościej się nie da tego wyjaśnić, no chyba że na czynniki pierwsze ale to już nie moja działka |
|
|
|
 |
Minty
Stwórczyni omc dr fizyki
 
Główny edytor: 
Drugi edytor: 
Pojedynki: być może
Pomogła: 259 razy Posty: 3446
33789 Prestiż
|
Wysłany: 29-02-2012, 11:34
|
|
|
Pathfinding to nie tylko omijanie. AI robi mapę otoczenia (jako raster lub tylko węzły sieci), nadaje poszczególnym punktom wagi i potem sprawdza wszystkie drogi do celu, szukając takiej o najniższej wadze. |
|
|
|
 |
Fadex
Legenda #4; #12; #18; #20; #21; #27
 
Główny edytor: 
Pojedynki: nie
Pomógł: 105 razy Posty: 1773
51612 Prestiż
|
Wysłany: 29-02-2012, 14:29
|
|
|
Są dwa typy pathfindingu. To wykorzystane w RTSach to typ wektorowy - czyli jak już wspomniane przez RXa linie i węzły, które mają za zadanie ominąć przeszkody. To drugie to typ rastrowy - czyli po prostu wyszukiwanie najkrótszej ścieżki metodą bruteforce. Teoretycznie działa wyłącznie na mapie opartej o siatkę, jednak po kilku modyfikacjach daje się je zastosować do wszystkich typów map, o ile droga nie jest za długa/sprzęt jest wystarczająco wydajny aby sprawdzić wszystkie punkty na mapie. Można też starać się optymalizować algorytm wyszukujący. Po dotarciu algorytmu do danego miejsca droga jest odtwarzana z powrotem - czyli w trakcie trwania algorytmu przechowywane są informacje jak ma poruszać się obiekt (w przypadku ruchu o siatce wystarczą 2 bity na krok - cztery kierunki)
Do obu typów wymagana jest mapa, w przypadku rastrowym wystarczy dwuwymiarowa tablica pozycji X i Y, w przypadku wektorów jest to nieco bardziej skomplikowane. |
_________________ If it doesn't have to work, I can optimize any code to a runtime of zero. What's your superpower?
wat |
|
|
|
 |
Dexter
Plutonowy
 
Główny edytor: 
Drugi edytor: 
Pojedynki: tak
Posty: 61
650 Prestiż
|
Wysłany: 29-02-2012, 20:51
|
|
|
Nie miałem pojęcia, że profesjonalnie nazywa się to 'pathfinding'. Poszperałem troszkę i znalazłem metodę A*, która wydaje się naprawdę logiczna i prosta. Do jej wykorzystania przydałyby się wielowymiarowe tablice powiązane z obiektami, ma ktoś pomysł jak przez to przebrnąć? Construct udostępnia tablicę tylko trójwymiarową, a przydałaby się większa. Najlepiej, gdyby obiekty miały swoje tablice, tak jak mają values.
Jest może jakiś plugin, który daje taką możliwość? Ostatecznie podobny plugin do MMF2? |
_________________ Tenshi no metsuki... |
|
|
|
 |
Neoqueto
Moderator Akcelerator
 
Główny edytor: 
Drugi edytor: 
Pojedynki: być może
Skype: 
Pomógł: 60 razy Posty: 537
7976 Prestiż
|
Wysłany: 29-02-2012, 22:50
|
|
|
Do MMF2 są to:
Pathfinding Object
Advanced Path Finding Object
A* FlashString (Flash) |
_________________ Jeśli otrzymałeś pomoc - pamiętaj o przyznaniu punktu Pomógł! |
|
|
|
 |
|