Autor Wątek: Wykrywanie przeciwnika w polu widzenia [2d]  (Przeczytany 757 razy)

Offline darthkurak

  • Użytkownik

# Kwiecień 02, 2011, 18:02:48
Witam, piszę grę 2d na projekt indywidualny i potrzebuję pomocy przy wykrywaniu wroga przez sztuczną inteligencję. Otóż opiszę o co dokładnie chodzi. Mamy planszę, bohatera i przeciwników. Chcę zaimplementować takie zachowanie, że przeciwnicy mają określone pole widzenia (zdefiniowane poprzez promień, kąt i zwrot). Nasz bohater jest określony jako prostokąt. Chcę napisać funkcję, która będzie mi sprawdzać, czy nasz bohater zawiera się w widoku przeciwnika. Niestety nie mogę póki co nic wydumać, a na zawał mi jest to potrzebne, gdyż muszę oddać specyfikację techniczną. Zatem rodzi się problem, jak stworzyć ten widok, gdzie głównym odnośnikiem jest wektor zwrotu, a parametrami widoku promień i kąt, i w jaki sposób sprawdzać, czy para prostokąt - widok przecinają się. Kolejnym problemem, jest rozszerzenie tej metody o zachowanie: jeżeli przed bohaterem znajduje się przedmiot, to jest oczywiste, że przeciwnik, nie może go zobaczyć (bo przedmiot przesłania widok). Za to to już nawet nie wiem jak się brać.  Bardzo proszę o pomoc,
Pozdrawiam,
Jakub Dropia
« Ostatnia zmiana: Kwiecień 02, 2011, 18:05:49 wysłana przez darthkurak »

Offline Mr. Spam

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

Offline maciek_slon

  • Użytkownik

# Kwiecień 02, 2011, 18:05:28
A czy możesz potraktować prostokąt jako punkt (utożsamić go z jego środkiem)? Bo wtedy obliczenia są trywialne ;P Wystarczy sprawdzić, czy kąt obserwator-cel zawiera się w przedziale zwrot +/- kąt patrzenia, oraz czy odległość obserwator-cel jest mniejsza od promienia.

Offline Oti

  • Użytkownik

# Kwiecień 02, 2011, 18:11:18
A czy możesz potraktować prostokąt jako punkt (utożsamić go z jego środkiem)? Bo wtedy obliczenia są trywialne ;P Wystarczy sprawdzić, czy kąt obserwator-cel zawiera się w przedziale zwrot +/- kąt patrzenia, oraz czy odległość obserwator-cel jest mniejsza od promienia.
Lepiej nie jako punkt, a jako 4 jego wierzchołki. Wtedy obliczenia są nie mniej trywialne, a efekt lepszy.

Offline darthkurak

  • Użytkownik

# Kwiecień 02, 2011, 18:13:00
Tak jeszcze się zastanawiałem, a jakby wykorzystać detekcję kolizji piksel po pikselu? Gdzie nasz widok jest określony wycinkiem koła? Miałoby to sens? No i jak załatwić to chowanie się za przedmiotami?

Offline Furry

  • Użytkownik
    • DevBlog

# Kwiecień 02, 2011, 18:13:34
@oti:Ale masz ich więcej(4X). Tyle, że jak masz np. quadTree to nie ma to najmniejszego znaczenia dla prędkości działania rozgrywki.

Kolizja piksel po pikselu? Ogranicz się do prostokątów i i tak będziesz miał co robić.
Co do chowania się za przedmiotami, ja określam obiekty jako priorytety(wyświetlania itp) dodatkowo, co może nieco opóźnia niektóre procesy ale pozwala wykryć co kogo zasłania i co ma być widoczne a co nie
« Ostatnia zmiana: Kwiecień 02, 2011, 18:17:18 wysłana przez Furry »

Offline maciek_slon

  • Użytkownik

# Kwiecień 02, 2011, 18:16:50
http://archive.gamedev.net/reference/programming/features/2dsoftshadow/

Źródłami światła są obserwatorzy, żeby sprawdzić, czy cel jest widoczny sprawdzasz, czy znajduje się on w cieniu ;P