Flame Opublikowano 18 Lipca 2016 Udostępnij Opublikowano 18 Lipca 2016 Dobry, Zrobiłem mały kodzik dot. podążania za postacią przez przeciwnika. Kodzik generalnie polega na tym żeby przeciwnik nie zobaczył postaci przez ścianę więc dałem tę linijeczkę: GML (step obiektu obj enemy) if !collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_wall,false,true) && distance_to_object(obj_character)<distance_to_object(obj_wall) problem w tym że distance_to_object(obj_wall) nie odnosi się do ściany w zasięgu widzenia a najbliższej, która nie koniecznie jest w zasięgu linii. Z tego też powodu mimo tego, że nawet jeśli zasięg wzroku koliduje z jakąś ścianą lecz postać jest przed nią, przeciwnik nie reaguje ze względu na ścianę np. obok niego, która jest bliżej niż sama postać. Próbowałem coś robić z id obj_wall ale nie wyszło to najlepiej :/ tutaj cały kodzik: GML (step obiektu obj enemy) dir=point_direction(x,y,obj_character.x,obj_character.y); if instance_exists(obj_character) { if !collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_wall,false,true) && distance_to_object(obj_character)<distance_to_object(obj_wall) { if collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_character,false,true) then seen=true; else seen=false; } else seen=false; } else seen=false; if seen==true mp_potential_step_object(obj_character.x,obj_character.y,spd,obj_wall); Dołączam SS z opisanej wyżej sytuacji: link Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 18 Lipca 2016 Udostępnij Opublikowano 18 Lipca 2016 Źle się do tego zabierasz. Za pomocą !collision_line, powinienes sprawdzic kolizje miedzy wrogiem a graczem, a jezeli kolizji nie ma, dopiero wtedy sprawdzic czy dystans miedzy wrogiem a graczem jest mniejszy lub rowny maksymalnemu zasiegowi wzroku: GML if !collision_line(x,y,obj_character.x,obj_character.y,obj_wall,false,true) && distance_to_obect(obj_character) <= MaxZasiegWidokuWPikselach { // Zobaczyl gracza } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 18 Lipca 2016 Udostępnij Opublikowano 18 Lipca 2016 Dodatkowo collision_line() zwróci ci ID obiektu który przeszkadza na lini. Mając te ID możesz sprawdzać sobie dystans pomiędzy obj_character a tym konkretnym kawałkiem ściany który blokuje pole widzenia. No i jeżeli w distance_to_object() (albo jakiejkolwiek innej funkcji) podasz nazwę obiektu a nie ID instance, to funkcja odniesie się do pierwszej instance tego obiektu która istniała w room i nie jest nie aktywna. Nie odnosi się wcale do najbliższej instance. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Flame Opublikowano 18 Lipca 2016 Autor Udostępnij Opublikowano 18 Lipca 2016 Nie zrozumiałeś mnie :) (albo ja ciebie xD) Potrzebuje mieć zwracane id obj_walla który koliduje z linią jego wzroku. Bez tego gra bierze najbliższą ścianę, która niekoniecznie znajduje się w zasięgu jego linii wzroku przez co przeciwnik nie atakuje. Chodzi o to, że gdy postać jest za ścianą(czyli jest dalej niż ściana w jego linii wzroku), przeciwnik nie atakuje, a gdy jest przed ścianą (co nie znaczy, że kolizji ze ścianą już nie ma) przeciwnik atakuje. Nie wiem jak mam zwrócić sobie id tego właśnie pojedyńczego bloku ściany który jest w kolizji z linią wzroku przeciwnika i o to właśnie pytam :jezor: A w jaki sposób odczytać ID z collision line. Collision line nie zwraca tru/false ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 18 Lipca 2016 Udostępnij Opublikowano 18 Lipca 2016 Zmienna = collision_line... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 18 Lipca 2016 Udostępnij Opublikowano 18 Lipca 2016 Nie wiem jak mam zwrócić sobie id tego właśnie pojedyńczego bloku ściany który jest w kolizji z linią wzroku przeciwnika i o to właśnie pytam :jezor: zmienna = collision_line(x,y,x+lengthdir_x(range,dir),y+lengthdir_y(range,dir),obj_wall,fa lse,true) Zapraszam do dokumentacji. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Flame Opublikowano 18 Lipca 2016 Autor Udostępnij Opublikowano 18 Lipca 2016 okej dzięki xd Sry za nieogarnięcie, wróciłem do programowania po dłuugiej przerwie i pozapominałem trochę :/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 18 Lipca 2016 Administratorzy Udostępnij Opublikowano 18 Lipca 2016 Pozapominałeś gdzie jest dokumentacja? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się