Skocz do zawartości

Szukanie Ścieżki - oprócz siebie


Rekomendowane odpowiedzi

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

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

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

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