Ice Cube Opublikowano 1 Września 2018 Udostępnij Opublikowano 1 Września 2018 Witam mam bohatera,wroga i przeszkode gdy podejde blizej do wroga on zaczyna isc za mna,ale utyka na przeszkodach tzn.jezeli stoje za przeszkoda on jej nie potrafi ominąć oto step wroga: if distance_to_object(obj_bohater)<300 { direction=point_direction(x,y,obj_bohater.x,obj_bohater.y);move_towards_point(obj_bohater.x,obj_bohater.y,1);ani=ani+0.7; // powrot lub pozycja 0 }else {direction=point_direction(x,y,xstart,ystart);ani=ani+0.7 // powrot co zrobic by wrog byl bardziej inteligentny i gdy zatrzyma sie na przeszkodzie"pomyśli" i poszuka lepszej drogi by dotrzec do bohatera pozdro Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Rozwiązanie Ta odpowiedź cieszy się zainteresowaniem. Wojzax Opublikowano 1 Września 2018 Filar Społeczności Rozwiązanie Ta odpowiedź cieszy się zainteresowaniem. Udostępnij Opublikowano 1 Września 2018 https://www.yoyogames.com/blog/64/using-motion-planning http://docs.yoyogames.com/source/dadiospice/002_reference/movement and collisions/motion planning/index.html Najprościej użyć do ruchu wroga wbudowanej funkcji mp_potential_step(xgoal, ygoal, stepsize, checkall) gdzie: xgoal, ygoal - współrzędne gracza stepsize - szybkość ruchu w pixelach na klatkę checkall - tutaj true (jeśli wróg ma omijać wszystkie obiekty po drodze) lub false (jeśli wróg ma omijać obiekty solid po drodze) Oczywiście nie jest to idealne rozwiązanie, funkcja polega na tym że program sprawdza przeszkody w najbliższym otoczeniu i zmienia kąt wroga tak aby je omijał, ale nie ma tutaj ogólnego planu więc wróg będzie się często zacinał lub chodził w kółko. Plusem jest mało obliczeń na klatkę. użycie mp_potential_step daje niezłe wyniki przy prostych przeszkodach Lepsze jest użycie funkcji z serii mp_grid, za pomocą funkcji takich jak mp grid_add_cell, add_rectangle, czy add_instance tworzysz mapę kwadracików i dodajesz informację które kwadraciki omijać. Potem dzięki mp_grid_path ustalasz dla obiektu optymalną trasę omijającą przeszkody (oczywiście wróg będzie się poruszał wzdłuż kratek czyli w ośmiu kierunkach). To podejście jest trudne do zoptymalizowania, jak masz dużą mapę, dużo przeciwników i każdy z nich na poczekaniu aktualizuje sobie pozycję gracza i ciągle oblicza nową trasę może być to mocno niewydajne, ale z drugiej strony będziesz miał pewność że przeciwnik się nie zatnie (ew. uzna że np. nie ma możliwości dojścia do gracza) Chell, Ice Cube, Penguin i 2 innych 5 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Ice Cube Opublikowano 2 Września 2018 Autor Udostępnij Opublikowano 2 Września 2018 18 godzin temu, Wojzax napisał: https://www.yoyogames.com/blog/64/using-motion-planning http://docs.yoyogames.com/source/dadiospice/002_reference/movement and collisions/motion planning/index.html Najprościej użyć do ruchu wroga wbudowanej funkcji mp_potential_step(xgoal, ygoal, stepsize, checkall) gdzie: xgoal, ygoal - współrzędne gracza stepsize - szybkość ruchu w pixelach na klatkę checkall - tutaj true (jeśli wróg ma omijać wszystkie obiekty po drodze) lub false (jeśli wróg ma omijać obiekty solid po drodze) Oczywiście nie jest to idealne rozwiązanie, funkcja polega na tym że program sprawdza przeszkody w najbliższym otoczeniu i zmienia kąt wroga tak aby je omijał, ale nie ma tutaj ogólnego planu więc wróg będzie się często zacinał lub chodził w kółko. Plusem jest mało obliczeń na klatkę. użycie mp_potential_step daje niezłe wyniki przy prostych przeszkodach Lepsze jest użycie funkcji z serii mp_grid, za pomocą funkcji takich jak mp grid_add_cell, add_rectangle, czy add_instance tworzysz mapę kwadracików i dodajesz informację które kwadraciki omijać. Potem dzięki mp_grid_path ustalasz dla obiektu optymalną trasę omijającą przeszkody (oczywiście wróg będzie się poruszał wzdłuż kratek czyli w ośmiu kierunkach). To podejście jest trudne do zoptymalizowania, jak masz dużą mapę, dużo przeciwników i każdy z nich na poczekaniu aktualizuje sobie pozycję gracza i ciągle oblicza nową trasę może być to mocno niewydajne, ale z drugiej strony będziesz miał pewność że przeciwnik się nie zatnie (ew. uzna że np. nie ma możliwości dojścia do gracza) Dzięki! tego szukałem ! 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ę