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)
Tak to wygląda zawsze jak nadasz obiektowi współrzędne viewa, trzęsie się przy poruszaniu.
Dużo lepiej jest rysować interfejs, masz np. obiekt control czy jakiś inny który służy wyłącznie rysowaniu interfejsu. Sam nie ma żadnego sprite'a i znajduje się w losowym miejscu w roomie, za to w draw dajesz mu np.
draw_sprite(interfejs_sprite,0,view_xview,view_yview)
i problem rozwiązany - przy poruszaniu viewem rysowany interfejs się nie trzęsie.