Skocz do zawartości

Kolizja obiektu z wszystkimi innymi obiektami


Danieo

Rekomendowane odpowiedzi

Witajcie GMClany!

Jakoż, że miałem meeega długą przerwę od GMa postanowiłem po zakupie wersji Pro w HumbleBundle przypomnieć sobie podstawy. Akurat jestem na etapie fizyki i mam do was pytanie. Aby "włączyć" obiektowi oddziaływanie (kolizje) z innym obiektem trzeba nadać mu Collision event (i parę innych parametrów fizycznych, ale nie o nie tutaj chodzi) z obiektem, z którym chcę aby ten obiekt oddziaływał. Jednak jak mam kilkadziesiąt obiektów fizycznych to takie dawanie w kółko collision event z czymś tam jest męczące i nie wygodne. Moje pytanie brzmi: czy istnieje coś takiego jak collision event with all (reaguj na kolizję z wszystkimi obiektami)?

 

P.S. Wiem, że można to rozwiązać w sposób, że tworzę obiekt z collision event z obiektami fizycznymi a następnie ustawiam go jako rodzic dla obiektów, które mają mieć kolizję z "wszystkimi" obiektami, ale chciałbym wiedzieć czy istnieje inny sposób.

Pozdrawiam.

Odnośnik do komentarza
Udostępnij na innych stronach

Pytanie bardzo nieprzyszłościowe. Dlaczego chcialbyś takie coś stworzyć? Co jeśli zaczniesz dodawać obiekty w tle, oraz inne niekolizyjne obiekty?

 

Odpowiadam jako odświeżka dla mnie, bo sam przeglądam właśnie swoje stare projekty. Było coś w stylu

GML
check_solid

Albo podobnie. Przynajmniej w starym GMie, obiekt miał globalną zmienną 'solid', a później pozycyjnie można w GMLu sprawdzać czy pixel stopy gracza jest wolny czy nie.

 

https://gmclan.org/index.php?wiki=article&zm=61

Wszystkie składają się z trzech warunków: pod hasłem obj wpisujemy all lub nazwę potrzebnego obiektu. Warunek prec określa, czy kolizja będzie obejmowała dokładny kontur obrazka(sprite), czy pole kolizji(bounding box).

GML
collision_point(x,y,obj,prec,notme); /* - ta funkcja sprawdza, czy punkt x i y znajduje się w kolizji z obiektem.*/

 

collision_rectangle(x1,y1,x2,y2,obj,prec,notme); /* - w tym wypadku jest sprawdzane, czy obiekt znajduje się w trakcie kolizji z "wypełnionym" prostokątem.

x1,y1 i x2,y2 to dwa przeciwległe rogi kwadratu. Dla przykładu możemy tej funkcji użyć, by sprawdzić, czy pewna strefa jest wolna od obiektów.*/

 

collision_circle(xc,yc,radius,obj,prec,notme); /* - ta funkcja sprawdza, czy obiekt odbywa kolizję z kołem o określonym promieniu i wycentrowanym w pozycji

xc, yc. Przykład-możemy użyć tej funkcji dla sprawdzenia, czy obiekt znajduje się w określonej strefie.*/

 

collision_ellipse(x1,y1,x2,y2,obj,prec,notme); /* - ta funkcja daje możliwość sprawdzenia, czy obiekt znajduje się w trakcie kolizji z elipsą rozciągniętą pomiędzy

jej dwoma przeciwległymi punktami. */

 

collision_line(x1,y1,x2,y2,obj,prec,notme); /* - ta funkcja testuje, czy obiekt odbywa kolizję z linią rozciągniętą pomiędzy punktami x1,y1 a x2,y2. Ta funkcja

jest naprawdę przydatna. Za jej pomocą możemy

sprawdzić, czy np: obiekt1 "widzi" obiekt 2.*/

 

Edit -

W komentarzach nawet gnysek opisał to o czym myślałem:

GML
place_free,

position_meeting,

place_empty

Trzeba tylko znaleść jak sie te funkcje używa :)

Odnośnik do komentarza
Udostępnij na innych stronach

Mam sprawę do...

 

parę innych parametrów fizycznych

 

Parametrów fizycznych? Collision boxy to w sumie nic z fizyki. Jeżeli chcesz używać Box2D (Silnika fizycznego w GM'ie) to absolutnie inna sprawa i oddzielna od podstawowego wykrywania kolizji, którego nie powinieneś używać w tej sytuacji. W innym wypadku, post Poxiego

Odnośnik do komentarza
Udostępnij na innych stronach

Tak to są parametry z Box2D i tak, musisz stworzyć parenty i się do nich odwoływać. GM musi wiedzieć że ten dany obiekt oczekuje na kolizję z innym obiektem. Jeżeli tym obiektem jest rodzic to kolizja będzie też dotyczyć jego dzieci.

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