Autor Wątek: AI omijanie przeszkód  (Przeczytany 8520 razy)

Offline Krolik

  • Użytkownik

# Lipiec 27, 2007, 20:57:50
siemka

tak sie zastanawiam jak mam zrobić ai w ktorym przeciwnik bedzie omijał przeszkody w tym przypadku będą to ściany. Czy trzeba zastosować detektory i czy jest jakiś prostrzy sposób .
Bede wdzieczny za pomoc .

ps. nie potrzebuje przykladow cpp czy delphi po prostu chcialbym wiedzieć na jakiej zasadzie to dziala

 ;)

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Lipiec 27, 2007, 21:06:55
Działa na tej zasadzie, że robisz mapę przeszkód i następnie stosujesz wybrany algorytm wyszukiwania drogi na tej mapie (tj. listy sąsiadujących ze sobą punktów niebędących przeszkodami :) ).

Offline Krolik

  • Użytkownik

# Lipiec 27, 2007, 21:34:35
hymm mapa przeszkod, a tak jasniej  :P moze by zastosowac detektory wokolo objektu i sprawdzac czy nie ma kolizji ...  ???

Offline Złośliwiec

  • Użytkownik
    • Dark Cult

# Lipiec 27, 2007, 21:44:27
hymm mapa przeszkod, a tak jasniej  :P moze by zastosowac detektory wokolo objektu i sprawdzac czy nie ma kolizji ...  ???

Jaśniej się już nie da, ale można łopatologicznie - ściany to '1', pusta przestrzeń to '0', w takim przypadku mapą może być tablica w rodzaju:

11111111
00000001
11111101

Wykrywanie kolizji może się okazać pomocne jak już masz mniej więcej określoną trasę dla postaci, ale większość przeszkód można ominąć "z daleka" na podstawie mapy wygenerowanej nawet jeszcze podczas wczytywania levelu.

Offline sobol

  • Użytkownik

# Lipiec 27, 2007, 22:46:05
gdzieś na warsztacie był art o A* (afair złośliwca w dodatku ;>). Poszukaj w necie o punktach widoczności.
Generalnie lepiej chyba niż tak "po kafelkach" jak mówi złośliwiec opisać mapę przy pomocy zbioru prostych (lub krzywych) i po prostu nie pozwalać postaci przechodzić przez te proste / krzywe. Dodatkowo oprzeć to na jakimś quad tree i już :)

Offline Reg

  • Administrator
    • Adam Sawicki - Home Page

# Lipiec 28, 2007, 10:25:09
Co to są te detektory? Bo pierwszy raz o nich słyszę.

Offline Krolik

  • Użytkownik

# Lipiec 28, 2007, 18:53:40
 ;)
detektory to niewidoczne objecty umieszczone wokolo postaci działajace na zasadzie sprawdzania czy nie ma kolizji.
                                             l
                                             l    o
    o       -----------o-----------l o X o
 o X o     ->         o X o ->             o
    o                      o

x to postac a  o  to detektory , jezeli object ( przeciwnik ) porusza sie w strone postaci i jest przeszkoda ( kolizja detektora z czymś np. scianą ) to nie moze przez nia przejsc tylko i dzie dalej i sprawdza czy jest kolizja , jak sciana sie konczy i jest przestrzen to nie ma kolizji i moze tap isc

 ;)


upshader

  • Gość
# Lipiec 28, 2007, 19:26:52
;)
detektory to niewidoczne objecty umieszczone wokolo postaci działajace na zasadzie sprawdzania czy nie ma kolizji.
                                             l
                                             l    o
    o       -----------o-----------l o X o
 o X o     ->         o X o ->             o
    o                      o

x to postac a  o  to detektory , jezeli object ( przeciwnik ) porusza sie w strone postaci i jest przeszkoda ( kolizja detektora z czymś np. scianą ) to nie moze przez nia przejsc tylko i dzie dalej i sprawdza czy jest kolizja , jak sciana sie konczy i jest przestrzen to nie ma kolizji i moze tap isc

 ;)



              /                         
            /                           
        o /       
     o X o             
      / o         
    /
  /

Lol, to najglupszy sposob o jakim slyszalem. A co jesli przeszkoda przechodzi przez srodek postaci tak jak na szkicu powyzej? Niby w jakich grach stosowano takie "detektory"? W rzeczywistosci sprawdza sie kolizje najpierw np. sfery otaczajacej przeszkode ze sfera otaczajaca gracza, pozniej bounding boxa otaczajacego przeszkode z bounding boxem otaczajacym postac, pozniej ew. jakies walce, kapsulki itp. zadnych "detektorow" sie nie robi z powodow ktore wymienilem wyzej.
« Ostatnia zmiana: Lipiec 28, 2007, 19:28:51 wysłana przez upshader »

Offline k_b

  • Użytkownik
    • Blog

# Lipiec 28, 2007, 19:36:43
              /                         
            /                           
        o /       
     o X o             
      / o         
    /
  /

Lol, to najglupszy sposob o jakim slyszalem. A co jesli przeszkoda przechodzi przez srodek postaci tak jak na szkicu powyzej? Niby w jakich grach stosowano takie "detektory"? W rzeczywistosci sprawdza sie kolizje najpierw np. sfery otaczajacej przeszkode ze sfera otaczajaca gracza, pozniej bounding boxa otaczajacego przeszkode z bounding boxem otaczajacym postac, pozniej ew. jakies walce, kapsulki itp. zadnych "detektorow" sie nie robi z powodow ktore wymienilem wyzej.

Dodając jeszcze detekcję po ukosie taka sytuacja jaką pokazałeś nie była by możliwa. Akurat tutaj klopiotr16 mówi o zwykłej mapce w 2D, więc takie coś jest rozwiązaniem najprostrzym i skutecznym.

Co do tematu: można by tu się zainteresować GoCap, polecam część z trzeciego tomu "Perełek programowania gier".
« Ostatnia zmiana: Lipiec 28, 2007, 19:41:14 wysłana przez k_b »

upshader

  • Gość
# Lipiec 28, 2007, 20:05:52

Dodając jeszcze detekcję po ukosie taka sytuacja jaką pokazałeś nie była by możliwa. Akurat tutaj klopiotr16 mówi o zwykłej mapce w 2D, więc takie coś jest rozwiązaniem najprostrzym i skutecznym.
Nastepny glupoty gada. Chodzbys dodal tysiac "detektorow" na okolo obiektu, zawsze beda szczeliny miedzy nimi. I w te szczeliny moga wchodzic male obiekty ktore beda przchodzic przez postac jakby jej nie bylo. A ilosc wymiarow nie ma tu zadnego znaczenia. Znaczenie ma za to ilosc kierunkow w jakich moze poruszac sie postac. W nowszych grach 2D postac takze moze sie poruszac w dowolnych kierunkach po plaszczyznie(a nie tylko 4) i wtedy sytuacja jest analogiczna jak w 3D.

A jesli mozliwosci ruchu mialo by byc tylko 4 (a mapka zapewne byla by zlozona z kafli) to W OGOLE zadne "detektory" nie sa potrzebne. Sprawdzamy tylko czy na polu na ktore ma zamiar wejsc postac juz cos stoi i jesli tak to postaci nie przemieszczamy. Proste jak drut.

Zobacz k_b jakie glupoty wygadujesz (zalaczony obrazek).
« Ostatnia zmiana: Lipiec 28, 2007, 20:21:23 wysłana przez upshader »

upshader

  • Gość
# Lipiec 28, 2007, 20:08:49
Ja zrozumialem detektor w ten sposob, ze to po prostu jakis "prostokat" dookola gracza, a nie tysiace jakichs mniejszych obiektow..? To w ogole by bez sensu bylo. Dlategu tutaj chodzi (chyba) o zwykly prostokat ograniczajacy, co jest oczywiscie swietnym sposobem na obliczanie wstepnych kolizji w 2D. W 3D wiadomo - rozszerzamy do szescianu czy tam, jak mowisz upshader, zrobic sfere

upshader

  • Gość
# Lipiec 28, 2007, 20:13:31
Ja zrozumialem detektor w ten sposob, ze to po prostu jakis "prostokat" dookola gracza
No wlasnie, ale prostokat otaczajacy gracza (prostokat w ktory bedzie wpisany gracz), a nie punkt PRZED graczem tak jak bylo na szkicu zaprezentowanym przez autora, i co wlasnie bylo nazwane "detektorem". LUDZIE!
« Ostatnia zmiana: Lipiec 28, 2007, 20:26:29 wysłana przez upshader »

upshader

  • Gość
# Lipiec 28, 2007, 20:20:41
No to faktycznie byloby dziwne rozwiazanie :). Chociaz na sile mozna sobie z takich kwadratow-klockow (min. 8, z kazdej strony) zrobic te "detektory", ale po co sobie tak zycie komplikowac :)

Offline k_b

  • Użytkownik
    • Blog

# Lipiec 28, 2007, 20:22:48
Nastepny glupoty gada. Chodzbys dodal tysiac "detektorow" na okolo obiektu, zawsze beda szczeliny miedzy nimi. I w te szczeliny moga wchodzic male obiekty ktore beda przchodzic przez postac jakby jej nie bylo. A ilosc wymiarow nie ma tu zadnego znaczenia. Znaczenie ma za to ilosc kierunkow w jakich moze poruszac sie postac. W nowszych grach 2D postac takze moze sie poruszac w dowolnych kierunkach po plaszczyznie(a nie tylko 4) i wtedy sytuacja jest analogiczna jak w 3D.

A jesli mozliwosci ruchu mialo by byc tylko 4 (a mapka zapewne byla by zlozona z kafli) to W OGOLE zadne "detektory" nie sa potrzebne. Sprawdzamy tylko czy na polu na ktore ma zamiar wejsc postac juz cos stoi i jesli tak to postaci nie przemieszczamy. Proste jak drut.

Zobacz k_b jakie glupoty wygadujesz (zalaczony obrazek).

Tzn. Złośliwiec zaprezentował mapkę wyraźnie prezentującą mapkę kaflową w 2D, autor tematu temu nie protestował, a więc o to mu chodziło, przez co ja zrozumiałem, że klopiotr16 detektorami nazywa sprawdzanie czy AI może wykonać ruch, w którąś ze stron. Stąd wynika nasze niezrozumienie.

upshader

  • Gość
# Lipiec 28, 2007, 20:24:02
No to faktycznie byloby dziwne rozwiazanie :). Chociaz na sile mozna sobie z takich kwadratow-klockow (min. 8, z kazdej strony) zrobic te "detektory", ale po co sobie tak zycie komplikowac :)
No ja rozumiem ten pomysl z "detektorem" jako sprawdzanie kolizji z punktem. Wtedy moze byc mowa o jakim kolwiek uproszczeniu czy optymalizacji. Jesli sprawdzamy kolizjie z prostokatem to po cholere robic 8 kolizji zamiast 1? I marnowac moc obliczeniowa, pisac wiecej kodu itd. itp. Troche logiki by wam sie przydalo ;]

//EDIT
k_b reprezentacja mapy zajetosci w zaden sposob nie determinuje ilosci stopni swobody w grze! Postaram Ci sie to wytlumaczyc jak 7 latkowi, zebys wreszcie zrozumial. Wiec tak: aktualnie robie w gre w ktorej bedzie mozna poruszac sie w dowolnych kierunkach (nieskonczona ilosc, nie 4) po plaszczyznie, a mape zajetosci do algorytmu wyszukiwania drogi rowniez bede reprezentowal w ten sposob. Tzn. bede uzywal dodatkowo drzew czworkowych do "upakowania" tego, aby mniej miejsca w pamieci zajmowalo, oraz zeby bylo mniej wezlow do przeszukania dla algorytmu wyszukiwania drogi, ale to nie ma wiekszego znaczenia, rownie dobrze moglbym uzywac dokladnie takiej reprezentacji jak przedstawil Zlosliwiec. Poprostu postac nie zajmuje jednego bitu na mapie zajetosci (jednego zera, albo jedynki) tylko jest odpowiednio wieksza. Np. zajmuje 100 takich miejsc. Pojedynczy obiekt w grze (Np. domek moze zajmowac kilkaset albo wiecej takich pol), pozniej przemieszczajac postac musimy sprawdzic czy wszystkie pola na ktorych stanie postac beda zerami. Sprobuj sobie to jakos poukladac w glowie zanim napiesz kolejnego posta ;]
« Ostatnia zmiana: Lipiec 28, 2007, 20:39:01 wysłana przez upshader »