Trzynasty Opublikowano 22 Lutego 2013 Udostępnij Opublikowano 22 Lutego 2013 Na początek chciałem się przywitać bo jestem nowy. Mam problem ze skryptem na wyszukiwanie drogi - mam go z tej strony. GML //WYSZUKANIE DROGI { //RESET --------------------------------------------------------------------------------------------------------------------------- path_end(); //stop! path_clear_points(Path); //czyścimy ścieżkę //with(Point)instance_destroy(); //czyścimy znaczniki //with(Goal)instance_destroy(); //--------------------------------------------------------------------------------------------------------------------------------- //WYSZUKIWANIE -------------------------------------------------------------------------------------------------------------------- Grid = mp_grid_create(0,0,40,30,16,16); //twożymy nową siatkę /* mp_grid_create(a,b,c,d,e,f); a i b - Pozycja w room'ie; c i d - ilość komórek siatki w pionie i poziomie e i f - rozmiary komórek w pionie i poziomie */ //mp_grid_add_instances(Grid,Obstacle,true); //komórki zajęte przez obiekt Obstacle ustaw jako niedozwolone mp_grid_add_instances(Grid,Player,true); //komórki zajęte przez obiekt Obstacle ustaw jako niedozwolone Ready = mp_grid_path(Grid,Path,x,y,(mouse_x div 16*16)+8,(mouse_y div 16*16)+8,true); //wyszukaj ścieżkę i daj znać czy znalazłeś czy nie do zmiennej Ready path_set_kind(Path,true); //ustaw gładkie krawędzie ścieżki mp_grid_destroy(Grid); //wywal siatkę0000000, /* Ja jestem zwolennikiem wywalania wszystkiego co niepotrzebne, ale jeśli chcesz to możesz utworzenie siatki oraz dodanie komórek niedozwolonych wstawić do zdarzenia Create i nie usówać siatki przez cały czas życia obiektu Player. */ PathWidth = path_get_number(Path)-1;//zapamietaj długość ścieżki /* Po to aby nie wywoływać 3 razy funkcji path_get_number() w dalszej części skryptu. Uczmy się oszczędzać moc przerobową procka :) ----------------------------------------------------------------------------------------------------------------------------------- */ /*if(Ready) //jeśli znalazł ścieżkę { instance_create(path_get_point_x(Path,PathWidth),path_get_point_y(Path,PathWidth),Goal); //pokaż znacznik punktu docelowego //pokaż znaczniki ścieżki for(i=0;i<PathWidth;i+=1) instance_create(path_get_point_x(Path,i),path_get_point_y(Path,i),Point); } /*else show_message('To miejsce jest niedostepne!'); //jeśli nie istnieje ścieżka, to powiedz o tym graczowi. */ } I problem w tym, że chce z poziomu playera, ominąć playerów. Wykrywa mi siebie jako przeszkodę, czy da się zastrzec czymś w stylu mp_grid_add_instances(Grid,id,true);? Może jest inny sposób? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Lutego 2013 Udostępnij Opublikowano 22 Lutego 2013 Skoro nie chcesz uwzględniać graczy jako przeszkody to czemu w tym mp_grid_add_instances(Grid,Player,true); dałeś Player, podejrzewam że to obiekty tych graczy tak? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Trzynasty Opublikowano 22 Lutego 2013 Autor Udostępnij Opublikowano 22 Lutego 2013 chodzi o to że to sterowanie jest takie RTSowe - czyli sterujemy kilkoma graczami o tym samym obiekcie. Chce uwzględnić wszystkich graczy prócz tego w którym skrypt jest wykonywany, by nie uważał siebie za przeszkodę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Lutego 2013 Udostępnij Opublikowano 22 Lutego 2013 Nie wiem czy zadziała ale spróbuj usunąć kratkę na której stoi gracz w ten sposób: GML mp_grid_clear_cell(Grid, x div 16*16, y div 16*16) No chyba że pojedynczy obiekt gracza zajmuje więcej niż 1 kratkę to będzie problem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Trzynasty Opublikowano 22 Lutego 2013 Autor Udostępnij Opublikowano 22 Lutego 2013 Już jestem twoim fanem :P Wielkie dzięki. Gridów nie ogarniam - wiem że są podobne do tablic dwumiarowych i tyle :P Śmiga, temat do zamknięcia. nie jednak nie zamykać, jak zaznaczam dwie jednostki to obie mogą iść na to samo miejsce. da się sprawdzać na bieżąco od nowa czy pozycja nadal są puste? Posty połączone. Proszę używać opcji edytuj - Uzjel Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Lutego 2013 Udostępnij Opublikowano 22 Lutego 2013 No jak chcesz sprawdzać odnowa to musisz wyczyścić grida i znowu odpalić add_instances i usunać tą 1 kratkę. Czyszczenie: mp_grid_clear_all(Grid) Z tym że miej na uwadze że takie ciągłe czyszczenie i sprawdzanie jest wolne. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Trzynasty Opublikowano 22 Lutego 2013 Autor Udostępnij Opublikowano 22 Lutego 2013 a nie ma optymalniejszego sposobu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 22 Lutego 2013 Udostępnij Opublikowano 22 Lutego 2013 A może zrobisz jakiś inny system, mniej precyzyjny. Np. Siatkę mp_grid wypełnisz jednorazowo tylko obiektami statycznymi wtedy jednostka wyznaczy sobie taki zarys prawidłowej drogi a za pomocą mp_potential_step jednostki by się między sobą omijały. Z tym że jak mówię to będzie mniej precyzyjnie bo jednostki będą się w dużej kupie między sobą motać. Ewentualnie dorobić jeszcze do tego motyw z Supreme Commander że jednostki w pewnej od siebie odległości się nawzajem odpychają. Tutaj link Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Trzynasty Opublikowano 23 Lutego 2013 Autor Udostępnij Opublikowano 23 Lutego 2013 dobra, dam sobie spokój z RTSami na razie :P 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ę