Anubarak Opublikowano 20 Sierpnia 2009 Udostępnij Opublikowano 20 Sierpnia 2009 Mam obj_player który wygląda tak (oczywiście ta różowa linia to nie jest wygląd rakiety):. No i chce żeby kolizje z obiektami sprawdzała funkcja colision_line (linia ma być rozciągnięta 15 pixeli przed obiektem tak jak wskazuje ta różowa linia). No i bym mógł sobie sam obliczyć współrzędne x1,x2,y1,y1 pomiędzy którymi ma być rozciągnięta colision_line ale w tym problem że ta rakieta to jeden z co najmniej 20 modeli dostępnych. No więc pytanie brzmi: czy można jakoś automatycznie policzyć kierunek oraz długość lenghdirow w tej sytuacji (uwzględniając to że te 20 modeli rakiety jest różnej wielkości oraz rakieta może się poruszac w 36 (360/10) kierunkach? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
47xxxxxxxx Opublikowano 20 Sierpnia 2009 Udostępnij Opublikowano 20 Sierpnia 2009 distance_to_object(object) ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubarak Opublikowano 20 Sierpnia 2009 Autor Udostępnij Opublikowano 20 Sierpnia 2009 Ale tu nie chodzi o to żeby sprawdzał odległość do obiektu tylko żeby sprawdzał czy z tą liną przed nim odbywa się jakaś kolizja co jest potrzebne do sprawdzania czy statek będzie mógł lecieć do przodu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 20 Sierpnia 2009 Udostępnij Opublikowano 20 Sierpnia 2009 if( collision_line( x + 15, y - 5, x + 15, y + 5, o_sciana, 1, 1 ) ) ? EDIT: No, jeszcze musiałbyś się pobawić lengthdirami ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZeroXbot Opublikowano 20 Sierpnia 2009 Udostępnij Opublikowano 20 Sierpnia 2009 linia ma być rozciągnięta 15 pixeli przed obiektem GML xx=lengthdir_x(x+15+image_width/2,direction); yy=lengthdir_y(y+15+image_width/2,direction); xx1=lengthdir_x(xx+image_height/2,direction+90); yy1=lengthdir_y(yy+image_height/2,direction+90); xx2=lengthdir_x(xx+image_height/2,direction-90); yy2=lengthdir_y(yy+image_height/2,direction-90); if(collision_line(xx1,yy1,xx2,yy2,costam)) { //kod } coś takiego, pisałem z pamięci, ale powinno działać. Origin sprite'a musi być na środku. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubarak Opublikowano 21 Sierpnia 2009 Autor Udostępnij Opublikowano 21 Sierpnia 2009 ZeroXbot twój kod wydaje się dobry ale żeby zobaczyć gdzie będzie rysować linię zmodyfikowałem trochę kod i pozmieniałem niektóre rzeczy: GML xx=lengthdir_x(15+sprite_width,direction) yy=lengthdir_y(15+sprite_width/2,direction) xx1=lengthdir_x(xx+sprite_height/2,direction+90) yy1=lengthdir_y(yy+sprite_height/2,direction+90) xx2=lengthdir_x(xx+sprite_height/2,direction-90) yy2=lengthdir_y(yy+sprite_height/2,direction-90) draw_line(x+xx1,y+yy1,x+xx2,y+yy2) Ale nie wiem dlaczego linia jest rysowana w złym miejscu i zawsze przechodzi przez środek obiektu. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZeroXbot Opublikowano 21 Sierpnia 2009 Udostępnij Opublikowano 21 Sierpnia 2009 ZeroXbot twój kod wydaje się dobry ale żeby zobaczyć gdzie będzie rysować linię zmodyfikowałem trochę kod i pozmieniałem niektóre rzeczy: GML xx=lengthdir_x(15+sprite_width,direction) yy=lengthdir_y(15+sprite_width/2,direction) xx1=lengthdir_x(xx+sprite_height/2,direction+90) yy1=lengthdir_y(yy+sprite_height/2,direction+90) xx2=lengthdir_x(xx+sprite_height/2,direction-90) yy2=lengthdir_y(yy+sprite_height/2,direction-90) draw_line(x+xx1,y+yy1,x+xx2,y+yy2) Ale nie wiem dlaczego linia jest rysowana w złym miejscu i zawsze przechodzi przez środek obiektu. O kurde, źle napisałem tamten kod :P Współrzędne x,y,xx,yy powinny byc dodawane oddzielnie. Teraz spróbuj. GML xx=x+lengthdir_x(15+sprite_width,direction) yy=y+lengthdir_y(15+sprite_width/2,direction) xx1=xx+lengthdir_x(sprite_height/2,direction+90) yy1=yy+lengthdir_y(sprite_height/2,direction+90) xx2=xx+lengthdir_x(sprite_height/2,direction-90) yy2=yy+lengthdir_y(sprite_height/2,direction-90) draw_line(xx1,yy1,xx2,yy2) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubarak Opublikowano 21 Sierpnia 2009 Autor Udostępnij Opublikowano 21 Sierpnia 2009 Dzięki ZeroXbot problem rozwiązany tyle że narodził się nowy i żeby nie robić nowego tematu napisze go tu. No to tak mam taki inny model rakiety (brzydki ale się poprawi): no i jak widać ma ona odgałęzienie które jest boczną kabiną no i chcę żeby ta czerwona linia była tylko przed rakietą a nie przed i trochę w prawo jak to widać na obrazku. Przestawianie orgina tu nie wchodzi w grę ponieważ muszę mieć jakiś punkt wokół którego będę się obracać (mówiłem ruch w 36 kierunkach). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bluks Opublikowano 21 Sierpnia 2009 Udostępnij Opublikowano 21 Sierpnia 2009 A pomyślałeś aby pobawić się na spricie rakiety i tam masz dwie skrzyżowane linie i jak sądzę ta po sierotko ustaw aby na poziomo była wyżej. :P :lol: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Morro Opublikowano 21 Sierpnia 2009 Udostępnij Opublikowano 21 Sierpnia 2009 Widać, że nie próbowałeś zrozumieć tego kodu. Zwiększ albo zmniejsz (popróbuj) yy1 lub yy. @up Przecież pisał, że nie może zmienić wysokości origina......................................................... Widać, że niewiele wiesz a pouczasz Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubarak Opublikowano 21 Sierpnia 2009 Autor Udostępnij Opublikowano 21 Sierpnia 2009 @Bluks To są orginy i właśnie o to mi chodzi żeby ich nie ruszać. @Morrowind próbowałem zrozumieć ten kod i myślę że może gdzieś trzeba użyć sprite_widht/2 i sprite_height/2 żeby znaleźć środek obrazka ale nie wiem gdzie to dać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZeroXbot Opublikowano 21 Sierpnia 2009 Udostępnij Opublikowano 21 Sierpnia 2009 Przy xx2 i yy2 sprite_height podziel na wieksza liczbę, aż ci się uda albo ustaw ręcznie wartość. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubarak Opublikowano 21 Sierpnia 2009 Autor Udostępnij Opublikowano 21 Sierpnia 2009 Ale mi chodzi o to żeby nie musieć ręcznie ustawiać tylko żeby jeden kod współpracował ze wszystkimi modelami rakiety . Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZeroXbot Opublikowano 21 Sierpnia 2009 Udostępnij Opublikowano 21 Sierpnia 2009 Czyli jeden kod ma dopasowywać się do każdej rakiety? Hmm... każda rakieta jest oddzielnym obiektem? Skoro tak to możesz zrobić w niej zmienną (albo nawet dwie) z "odchyleniem" długości linii. Wyglądałoby to tak: GML //w create zrobisles zmienna modyfikator[0]=0 i modyfikator[1]=10np. xx=x+lengthdir_x(15+sprite_width,direction) yy=y+lengthdir_y(15+sprite_width/2,direction) xx1=xx+lengthdir_x(sprite_height/2-modyfikator[0],direction+90) yy1=yy+lengthdir_y(sprite_height/2-modyfikator[0],direction+90) xx2=xx+lengthdir_x(sprite_height/2-modyfikator[1],direction-90) yy2=yy+lengthdir_y(sprite_height/2-modyfikator[1],direction-90) draw_line(xx1,yy1,xx2,yy2) Może to pomoze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Anubarak Opublikowano 21 Sierpnia 2009 Autor Udostępnij Opublikowano 21 Sierpnia 2009 Hmm... każda rakieta jest oddzielnym obiektem? Skoro tak to możesz zrobić w niej zmienną (albo nawet dwie) z "odchyleniem" długości linii. Niestety (albo stety) obiekt jest jeden i w zależności jaki model się wybierze tak będzie wyglądać. Może twój kod by się sprawdził ale niema jakiegoś innego sposobu bez zmiennych? EDIT: Może by coś zrobić jakoś tak żeby znalazło sprite_width/2 i sprite_height/2 tam gdzie znajduje się obiekt a nie w lewy górnym rogu pokoju bo ja nie mam pomysłu jak to zrobić ;( 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ę