Skocz do zawartości

ai Wroga


Ice Cube
Przejdź do rozwiązania Rozwiązane przez Wojzax,

Rekomendowane odpowiedzi

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" :P i poszuka lepszej drogi by dotrzec do bohatera

 

pozdro :)

 

Odnośnik do komentarza
Udostępnij na innych stronach

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ę.

 

Q9VCtd4.gif

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...