Skocz do zawartości
  • 0
Ice Cube

ai Wroga

Pytanie

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 :)

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

2 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0

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)

 

  • Super (+1) 4

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
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 ! :)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

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

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×