Skocz do zawartości

koordynaty kolizji w top down


Rekomendowane odpowiedzi

  • Filar Społeczności

Żenująco proste pytanie. Mamy ten niebieski obiekt i problem polega na tym, że chciałbym sprawdzić czy promień poprowadzony ze środka obiektu o jakimś znanym kącie koliduje z jakimś obiektem i znać chciałbym przede wszystkim koordynaty kolizji. Jezu no, tyle już kombinuje i dupa. Wiem, że to jakieś chyba zalążki raycastingu, jak się za to zabrać? Zależy mi jedynie na x i y kolizji. No i przyjmijmy, że promień jest tylko jeden żeby już ułatwić co nieco.

dd.png

Odnośnik do komentarza
Udostępnij na innych stronach

Jeżeli sprawdzanie jest punktowe to nic lepszego od raycasta nie bedzie. Moze ktos zna lepsze(wydajniejsze) rozwiazanie od tego ktore tu proponuje, ale uzycie dsin i dcos w celu stopniowego poruszania testem kolizji w wybranym kierunku + collision_point wydaje sie byc najlepszym wyjsciem.

Edit:Oczywiscie abort testu przy wyjsciu poza zasieg mapy czy wyjscie poza maksymalny zasieg testu by sie przydalo.

Jezeli robisz to dla poruszania instancja do max jakiegos dystansu to pętla for zmienajace faktyczne x/y instancji z dokładnością do 1/10 piksela działa dobrze imo.

 

Edit2: Mozesz wykonac kilka wersji i zobaczyc ktora ile mikrosekund czasu zajmuje w tych samych warunkach.

 

Edit3:

Prosty kod przy założeniu, że kolizja punktowa z obiektem obj_solid nie wychodząc poza room lub zasięg 400 pikseli, kąt 28 stopni(gm'owych, 0 z prawej).

GML
//Zakladamy ze te zmienne juz istnieja:

Kat = 28;

Zas = 400;

//Kod wyszukiwania

var f=false,fx=x,fy=y,r=0;

while(true){

if r>Zas || fx<0 || fx>room_width || fy<0 || fy>room_height break;

fx+=dcos(Kat);

fy-=dsin(Kat);

r++;

if collision_point(fx,fy,obj_solid,false,true){

f=true;

break;

}

}

//Jezeli f=true znalazlo kolizje w [fx,fy]</span>

 

Edit 4:

Mialem juz nic nie dopisywac, ale raczej test kolizji powinien byc przed poruszeniem punktem aby sprawdzic pozycje startowa. Inaczej przy zalozeniu kolizji na punkcie startowym da nam wynik bledny o odleglosc 1 piksela w wybranym kierunku.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 9 miesięcy temu...
  • Filar Społeczności

tak btw to nigdy nie zadziałało, nie umiałem tego użyć. Tak napisałem byście się odpierdolili

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