Cekol Opublikowano 2 Marca 2009 Udostępnij Opublikowano 2 Marca 2009 Hejo. Przedstawiam wam mój skrypt sprawdzający, czy 2 odcinki się przecinają xd Do poprawnego działania skryptu, potrzebujemy 2 skrypt , obliczający kąt pomiędzy 2 kierunkami: DirDiv (Skrypt na obliczanie różnicy kąta): GML var dif if(argument1>argument0+180) { dif=-((360-argument1)+argument0) } else{ if(argument0>argument1+180) { dif=((360-argument0)+argument1) } else{ dif=argument1-argument0 } } return dif I tu sam skrypt sprawdzania czy linie się przecinają: Lines_collide: GML CH_XSTART_1=argument0 CH_YSTART_1=argument1 CH_XEND_1=argument2 CH_YEND_1=argument3 CH_XSTART_2=argument4 CH_YSTART_2=argument5 CH_XEND_2=argument6 CH_YEND_2=argument7 MAINDIR=DirDiv(point_direction( CH_XSTART_1 ,CH_YSTART_1 , CH_XEND_1 , CH_YEND_1 ),0) DIR=point_direction(CH_XSTART_1,CH_YSTART_1, CH_XSTART_2 , CH_YSTART_2 ) DIST=point_distance(CH_XSTART_1,CH_YSTART_1, CH_XSTART_2 , CH_YSTART_2 ) CH_XSTART_2=lengthdir_x(DIST,DIR+MAINDIR) CH_YSTART_2=lengthdir_y(DIST,DIR+MAINDIR) DIR=point_direction(CH_XSTART_1,CH_YSTART_1, CH_XEND_2 , CH_YEND_2 ) DIST=point_distance(CH_XSTART_1,CH_YSTART_1, CH_XEND_2 , CH_YEND_2 ) CH_XEND_2=lengthdir_x(DIST,DIR+MAINDIR) CH_YEND_2=lengthdir_y(DIST,DIR+MAINDIR) DIST=point_distance(CH_XSTART_1,CH_YSTART_1,CH_XEND_1,CH_YEND_1) CH_XSTART_1=0 CH_YSTART_1=0 CH_XEND_1=DIST CH_YEND_1=0 if CH_YSTART_2>0 { CH_YSTART_2=-CH_YSTART_2 CH_YEND_2=-CH_YEND_2 } if CH_XSTART_2<0 && CH_XEND_2<0 {return 0; exit} if CH_XSTART_2>DIST && CH_XEND_2>DIST {return 0; exit} if CH_YEND_2<0 {return 0; exit} if DirDiv( point_direction(CH_XSTART_2,CH_YSTART_2,0,0) , point_direction(CH_XSTART_2,CH_YSTART_2,CH_XEND_2,CH_YEND_2) ) < 0 {return 0; exit} if DirDiv( point_direction(CH_XSTART_2,CH_YSTART_2,DIST,0) , point_direction(CH_XSTART_2,CH_YSTART_2,CH_XEND_2,CH_YEND_2) ) > 0 {return 0; exit} return 1; Zeby było wszystko jasne, dam przykład :P https://gmclan.org/up808_12_lies.html (gmk) Prosze mnie nie pytać, czemu nie ma komentarzy, czy czegoś takiego. Jest to skrypt, a nie Przykład pokazujący jak coś zrobić.(Co nie znaczy, że nie wiem o co chodzi w skrypcie ;p) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 2 Marca 2009 Udostępnij Opublikowano 2 Marca 2009 Super :) Spełnia swoje zadanie więc 5/5 ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 2 Marca 2009 Udostępnij Opublikowano 2 Marca 2009 Sory, muszę się czepić... Zamiast GML var dif if(argument1>argument0+180) { dif=-((360-argument1)+argument0) } else{ if(argument0>argument1+180) { dif=((360-argument0)+argument1) } else{ dif=argument1-argument0 } } return dif Można dać GML return ((((argument0-argument1) mod 360)+540) mod 360)-180;Może się mylę, ale chyba trochę krótszy (heh, nawet minimalnie wydajniejszy może :D) kodzik. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 2 Marca 2009 Udostępnij Opublikowano 2 Marca 2009 Wszystko działa bardzo dobrze i sprawnie :) 5/5 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ę