Filar Społeczności Czołg Krymski Opublikowano 20 Maja 2016 Filar Społeczności Udostępnij Opublikowano 20 Maja 2016 Ż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. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 20 Maja 2016 Udostępnij Opublikowano 20 Maja 2016 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 Więcej opcji udostępniania...
ediepl Opublikowano 20 Maja 2016 Udostępnij Opublikowano 20 Maja 2016 Użyj wyszukiwania binarnego ( yxe albo platyna chyba kiedy to stawiał ), kat dostaniesz używając lengthdir x i y Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 20 Maja 2016 Udostępnij Opublikowano 20 Maja 2016 Użyj wyszukiwania binarnego ( yxe albo platyna chyba kiedy to stawiał ), kat dostaniesz używając lengthdir x i y Dokładnie ediepl. Chciałem napisać to samo. Tu link https://gmclan.org/index.php?artykul=74&...2=20&s3=ASC Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Czołg Krymski Opublikowano 21 Maja 2016 Autor Filar Społeczności Udostępnij Opublikowano 21 Maja 2016 dziękuję bardzo. Rzeczywiście wszystko działa jak należy i jest fajowsko. Pozdrawiam Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności Czołg Krymski Opublikowano 21 Lutego 2017 Autor Filar Społeczności Udostępnij Opublikowano 21 Lutego 2017 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 Więcej opcji udostępniania...
Filar Społeczności Chell Opublikowano 22 Lutego 2017 Filar Społeczności Udostępnij Opublikowano 22 Lutego 2017 ale troche poziomu trzymaj 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ę