odex Opublikowano 25 Czerwca 2015 Udostępnij Opublikowano 25 Czerwca 2015 Najpierw zacznę po prostu od przykładu by nie przedłużać - https://www.youtube.com/watch?v=FU425Ah3qWU...eature=youtu.be (patrzymy na prawą stronę ekranu). Jak widać jeden statek zachowuje się poprawnie, natomiast drugiego nagle potrzebują jego ludzie. Problem jest taki taki, że kod na poruszanie się obu obiektów jest taki sam (z wyjątkiem szybkości poruszania ale to raczej nie to jest powód jak sądzę). Create: GML grid = mp_grid_create(0, 0, room_width div 54, room_height div 54, 54, 54); mp_grid_add_instances(grid, obj_block, false); mp_grid_add_instances(grid, obj_block_tinted, false); mp_grid_add_instances(grid, obj_door, false); mp_grid_add_instances(grid, obj_blockbutton1, false); mp_grid_add_instances(grid, obj_blockbutton2, false); path = path_add(); Step: GML if canmove = 1 and stop2 = 0 //poruszanie sie { if mp_grid_path(grid, path, x, y, obj_hitbox.x, obj_hitbox.y, 1) { path_start(path, 1.1, 3, 0); } } Domyślam się, że gdzieś coś musi być inaczej, problem jest, że nie do końca wiem na co mam zwrócić uwagę, mimo wczorajszych długich poszukiwań. Obj_hitbox to gracz, obj_blockbutton1 i 2 to te kolorowe klocki. Z góry dzięki każdemu za jakąś sugestię co może być nie tak i gdzie szukać rozwiązania. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 25 Czerwca 2015 Udostępnij Opublikowano 25 Czerwca 2015 Po pierwsze: Twój grid może być globalny. Każdy instance może korzystać z jednego wspólnego. Dopiero samo mp_grid_path() wykorzystuje inne argumenty. Po drugie zacznij sprawdzać co się dzieje z tymi obiektami. Albo odpal debuger albo wypisuj na ekranie co się teraz dzieje. Polecam do szybkiego testowania robić tak: show_debug_message(path_speed) Wtedy w tej czarnej konsoli na dole IDE GameMakera pojawi się wartość danej zmiennej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 26 Czerwca 2015 Autor Udostępnij Opublikowano 26 Czerwca 2015 To w takim razie moje pytanie jest jak działa dokładnie funkcja mp_grid_path. Jeżeli droga do celu jest niemożliwa przez elementy uwzględnione w siatce (jak np klocki w moim filmiku) to wtedy sciezka nie zostaje w ogole utworzona, zostanie utworzona ale nie będzie działać w ogóle, czy też zacznie dopiero działać jak ścieżka będzie dostępna? Bo widzę, ze to ostatnie średnio działa. Więc pytanie- jak zrobić by obiekt ruszył po ścieżce dopiero wtedy gdy będzie ona możliwa. Sorry jak coś niejasno napisałem z góry. Praca + komórka to nie jest najlepszy sposób na pisanie postów :-) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 26 Czerwca 2015 Udostępnij Opublikowano 26 Czerwca 2015 Funkcja zwróci true oraz przypisze nowo wygenerowany path do podanego w argumencie. Jeżeli droga nie istnieje funkcja nic nie zrobi... ale ten path musi wcześniej istnieć! I to jest problem, bo nawet pusty path ma 2 wierzchołki. Więc być może warunek z jakiegoś powodu jest spełniony i rozpoczynasz path. Czemu się to dzieje? Może twój statek tworzy się i wykonuje sprawdzenie ścieżki zanim wszystkie ściany się pojawią? Postawiłeś go w room na początku, a potem dopiero dodałeś ściany? A potem dodałeś drugi statek i ten już działa? Tak? To masz rozwiązanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 27 Czerwca 2015 Autor Udostępnij Opublikowano 27 Czerwca 2015 To w takim razie na przykładzie poniższego filmiku: https://www.youtube.com/watch?v=1YZaO1P9eoE...eature=youtu.be Jak widać poradziłem sobie z kwestią uciekania statków poza pokój (co było mocno błahą sprawą i niepotrzebnie w ogóle zakładałem temat w tej sprawie za co przepraszam), jednak dalej jak widać ścieżki nie działają poprawnie. W kodzie, który załączyłem w pierwszym poście, widać że cel jest dla statku wroga by dobrzeć do gracza. Cykl wydarzeń wygląda więc tak: 1. Start roomu - stworzenie ścieżki, 2. Ścieżka jest przyblokowana z każdej strony, bez możliwości dotarcia do celu, GM mówi "nie wiem co robić więc stoimy" 3. Ściany zostają zniszczone, droga robi się dostępna, powinniśmy ruszyć wzdłuż ścieżki po siatce do celu. Problem jest jednak taki, że tak się nie dzieje. Wróg uaktywnia się dopiero wtedy gdy podlecę blisko (co widać na załączonym filmiku), a nawet wtedy jego ścieżka nie działa prawidłowo (taniec w przód i w tył). Co do kwestii ulokowania obiektów w roomie to ściany zawsze są pierwsze, na końcu wrogowie. Dla pewności pousuwałem wszystkich i dodałem jeszcze raz - efekt taki sam jak widać. Stąd moje pytanie - gdzie jest mój błąd w logice? Dodam oczywiście, że w przypadku gdy w roomie droga jest dostępna do naszego gracza to wszystko działa bez najmniejszego problemu. Czy jest jakaś funkcja, która może mi wyświetlać ścieżkę na ekranie? I czy cała funkcja mp_grid_path nie powinna działać tak jak rozpisałem w punktach powyżej? Jeśli nie a ja jestem po prostu tępy to w jaki sposób wykonać zamierzony przeze mnie efekt? Z góry dzięki za odpowiedź Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 27 Czerwca 2015 Udostępnij Opublikowano 27 Czerwca 2015 Zobacz draw_path(path, x, y, absolute); oraz mp_grid_draw(id); Obie funkcje w draw mają być no i daj to jakiemuś obiektowi z najniższym depth. Bo wygląda wszystko ok. Ewentualnie może origin spritów nie masz na środku ale chyba masz bo strzały są dobre. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 27 Czerwca 2015 Autor Udostępnij Opublikowano 27 Czerwca 2015 draw_path: https://www.youtube.com/watch?v=DKFMutbEN2o...eature=youtu.be Jak widać ścieżka zostaje zerwana w miejscu gdzie wcześniej znajdowały się te czerwone/zielone klocki. Potwierdza to też mp_grid_draw. Tutaj jednak już widzę, że nawet po zniszczeniu tych czerwonych klocków, region w którym one stały dalej jest zaznaczony na czerwono (jako niedostępny). Ma to sens o tyle, że wrogi statek zaczyna mnie atakować dopiero gdy podlecę do niego za te kolorowe klocki, a gdy z nich wylecę to ścieżka przestaje funkcjonować. Więc pytanie - czy to normalne, że usunięcie bloków nie wykreśla ich jednocześnie z siatki? Czy ja po prostu zrobiłem coś nie tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 27 Czerwca 2015 Udostępnij Opublikowano 27 Czerwca 2015 Tak to normalne, trzeba się o to zatroszczyć samemu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
odex Opublikowano 27 Czerwca 2015 Autor Udostępnij Opublikowano 27 Czerwca 2015 Funkcja mp_grid_clear_rectangle działa, jednak teraz muszę przebudować swój cały system siatki na jedną globalną. Dla pewności w związku z tym zapytam od razu - czy jest jakiś bardziej optymalny sposób czy tamte funkcja to jest to co powinienem używać w tej sytuacji. Wiem, że jest jeszcze mp_grid_clear_cell ale ona odwołuje się bezpośrednio do komórek siatki, więc rectangle łatwiej mi po prostu usunąć te miejsca, które trzeba. Od razu dopytam też - jak zrobić by dwa takie same statki nie mogły być w tej samej komórce? Bo jak dodam do mp_grid_add_instances to wróg przestaje się całkowicie ruszać (co ma sens bo sam jest niedozwoloną komórką). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 27 Czerwca 2015 Udostępnij Opublikowano 27 Czerwca 2015 Po pierwsze to bym zrobił globalną siatkę. A zamiast ruszać statkami za pomocą path_start() bo to rusza nimi "na sztywno" to użyłbym mp_potential_step() coś takiego zrobiłem tutaj https://forum.gmclan.org/index.php?showtopic=29026 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ę