Sirluki Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Wiatm, znów mam mały problem. Mianowicie korzystam w programie z draw_rectangle i tutaj pytanie: Jak obracać ten rysowany prostokąt o jakiś kąt? Istnieje jakaś funkcja? Bo nic nie znalazłem... Z góry wielkie dzięki :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pieter Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 niestety nie istnieje takowa ;] chyba, że jakoś na surface... nie wiem... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sirluki Opublikowano 25 Maja 2008 Autor Udostępnij Opublikowano 25 Maja 2008 niestety nie istnieje takowa ;] chyba, że jakoś na surface... nie wiem... Czyli w żaden sposób nie da się obrócić tego prostokątu? :mellow: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Jaklub Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Możesz rysować 4 kreski i 2 trójkąty. To najprostszy sposób. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sirluki Opublikowano 25 Maja 2008 Autor Udostępnij Opublikowano 25 Maja 2008 Możesz rysować 4 kreski i 2 trójkąty. To najprostszy sposób. Chodzi o dwa trójkąty prostokątne? A jak je obracać? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Starczy draw_line i lengthdir'y. GML x2 = x1+lengthdir_x(dlugosc_bok1, kat); y2 = y1+lengthdir_y(dlugosc_bok1, kat); x3 = x2+lengthdir_x(dlugosc_bok2, kat+90); y3 = y2+lengthdir_y(dlugosc_bok2, kat+90); x4 = x3+lengthdir_x(dlugosc_bok1, kat+180); y4 = y3+lengthdir_y(dlugosc_bok1, kat+180); x5 = x4+lengthdir_x(dlugosc_bok2, kat+270); y5 = y4+lengthdir_y(dlugosc_bok2, kat+270); draw_line( x1, y1, x2, y2 ); draw_line( x2, y2, x3, y3 ); draw_line( x3, y3, x4, y4 ); draw_line( x4, y4, x5, y5 ); voila! lub jak kto woli: GML draw_primitive_begin(pr_linestrip); draw_vertex(x1,y1); draw_vertex(x2,y2); draw_vertex(x3,y3); draw_vertex(x4,y4); draw_vertex(x5,y5); draw_primitive_end(); A żeby było jeszcze prościej robisz se skrypt draw_rectangle_angle i wsadzasz: GML x1 = argument0; // poczatkowy x y1 = argument1; // poczatkowy y /* argument2 - dlugosc 1 boku argument3 - dlugosc 2 boku argument4 - kat */ x2 = x1+lengthdir_x(argument2, argument4); y2 = y1+lengthdir_y(argument2, argument4); x3 = x2+lengthdir_x(argument3, argument4+90); y3 = y2+lengthdir_y(argument3, argument4+90); x4 = x3+lengthdir_x(argument2, argument4+180); y4 = y3+lengthdir_y(argument2, argument4+180); x5 = x4+lengthdir_x(argument3, argument4+270); y5 = y4+lengthdir_y(argument3, argument4+270); draw_primitive_begin(pr_linestrip); draw_vertex(x1,y1); draw_vertex(x2,y2); draw_vertex(x3,y3); draw_vertex(x4,y4); draw_vertex(x5,y5); draw_primitive_end(); Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 E, a po co się męczyć z rysowaniem linii, skoro można po prostu użyć draw_rectangle? =) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 No to miszczu ujawnij jak =p Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
lenin Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 A nie można np. zrobić sprita i go drawować? Wyjdzie Ci prawie na to samo. :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 @Yoda: Ach, sorry, pomyłka w poprzednim poście. Nie draw_rectangle, tylko draw_triangle. ;p Rysowania dwóch trójkątów tak, żeby utworzyły prostokąt. Problem pojawi się, jeśli będziemy chcieli narysować sam obrys, bo wtedy widoczna będzie przekątna, ale zawsze można ją zakryć linią. No i zauważ, że Twoja funkcja wymięka, kiedy zachodzi potrzeba narysowania wypełnionego prostokąta. ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sirluki Opublikowano 25 Maja 2008 Autor Udostępnij Opublikowano 25 Maja 2008 @Yoda: Ach, sorry, pomyłka w poprzednim poście. Nie draw_rectangle, tylko draw_triangle. ;p Rysowania dwóch trójkątów tak, żeby utworzyły prostokąt. Problem pojawi się, jeśli będziemy chcieli narysować sam obrys, bo wtedy widoczna będzie przekątna, ale zawsze można ją zakryć linią. No i zauważ, że Twoja funkcja wymięka, kiedy zachodzi potrzeba narysowania wypełnionego prostokąta. ;) Chodzi o wypełniony prostokąt. Sorki bardzo Yoda, że tego nie podkreśliłem :) W tej chwili rysuje wypełniony białym kolorem prostokąt i zmieniam jego image_alpha :) Ale jakoś nie mogę sobie wyobrazić na jakiej podstawie miałyby funkcjonować te trójkąty, może mi ktoś to wytłumaczyć? @lenin: Aaa, pomyśle nad tym :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 W tej chwili rysuje wypełniony białym kolorem prostokąt i zmieniam jego image_alpha :)Za pomocą image_alpha obraca sie sprite'a, więc jakim cudem obracasz nim rysowany prostokąt? :| Ale jakoś nie mogę sobie wyobrazić na jakiej podstawie miałyby funkcjonować te trójkąty, może mi ktoś to wytłumaczyć?Jeśli przetniesz prostokąt wzdłuż przekątnej, powstaną dwa trójkąty, nie? =3 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sirluki Opublikowano 25 Maja 2008 Autor Udostępnij Opublikowano 25 Maja 2008 Za pomocą image_alpha obraca sie sprite'a, więc jakim cudem obracasz nim rysowany prostokąt? :| Jeśli przetniesz prostokąt wzdłuż przekątnej, powstaną dwa trójkąty, nie? =3 1. Za pomocą image_alpha zmienia się przezroczystosc obiektu :) A do rysowanego prostokątu mam kod: GML draw_set_alpha (image_alpha); i zniemniam jego przezroczystosc :) 2.Nom, dwa trójkąty prostokątne. Ale jak obracać trójkąty, żeby uzyskać efekt obracanego prostokąta? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 No i zauważ, że Twoja funkcja wymięka, kiedy zachodzi potrzeba narysowania wypełnionego prostokąta. smile2.gif A to nie można pr_trianglestrip? Sirluki, daj tam zamiast linestrip - trianglestrip i masz! Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Maximal Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 1. Za pomocą image_alpha zmienia się przezroczystosc obiektu :) A do rysowanego prostokątu mam kod: GML draw_set_alpha (image_alpha); i zniemniam jego przezroczystosc :) Omg, jakiś otępiały dzisiaj jestem. =q Już się nie odzywam. ;D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 draw_rectangle_angle(x1,y1,a,b,outline,angle); x1, y1 - pozycja lewego górnego rogu prostokąta a, b - długości boków outline - obrys (0)* czy wypełniony (1) angle - kąt obrotu GML x1 = argument0; y1 = argument1; a = argument2; b = argument3; outline = argument4; angle = argument5; px1 = x1 + lengthdir_x(a,angle); py1 = y1 + lengthdir_y(a,angle); px2 = px1 + lengthdir_x(b,angle-90); py2 = py1 + lengthdir_y(b,angle-90); px3 = px2 + lengthdir_x(a,angle-180); py3 = py2 + lengthdir_y(a,angle-180); if (outline) { draw_line(x1,y1,px1,py1); draw_line(px1,py1,px2,py2); draw_line(px2,py2,px3,py3); draw_line(px3,py3,x1,y1); } else { draw_triangle(x1,y1,px1,py1,px2,py2,0); draw_triangle(px3,py3,px1,py1,px2,py2,0); } * - obrys nie wychodzi najlepiej przy obrocie... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Ej, Matthew to samo praktycznie już napisałem =( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matthew Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Napisałeś to trochę chaotycznie, a żeby którykolwiek z twoich kodów zadziałał to trzeba je połączyć (a napisałeś albo albo) :) W sumie, to draw_primitive jest lepsze :D Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sirluki Opublikowano 25 Maja 2008 Autor Udostępnij Opublikowano 25 Maja 2008 Wielkie dzięki Matthew, skorzystałem z Twojego kodu, tylko mam jedno pytanie. Jak zmienić te boki trójkątów, bo chyba źle są ustawione i wychodzi coś takiego: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Użyj draw_primitive, a nie trójkątów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sirluki Opublikowano 25 Maja 2008 Autor Udostępnij Opublikowano 25 Maja 2008 Użyj draw_primitive, a nie trójkątów. Nie wiem jak użyć draw_promitive ponieważ pierwszy raz sie spotykam z ta funkcja, a na trójkątach to dobrze wygląda... :) EDIT: Już sobie poradziłem, działa świetnie :) Tak powinien wyglądać kod: GML else { draw_triangle(x1,y1,px1,py1,px2,py2,0); draw_triangle(px3,py3,px2,py2,x1,y1,0); } Matthew oczywiście w credits :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Yoda Opublikowano 25 Maja 2008 Udostępnij Opublikowano 25 Maja 2008 Nie wiem jak użyć draw_promitive ponieważ pierwszy raz sie spotykam z ta funkcja, a na trójkątach to dobrze wygląda... smile.gif Podawałem w moich poprzednich postach: GML x1 = argument0; // poczatkowy x y1 = argument1; // poczatkowy y /* argument2 - dlugosc 1 boku argument3 - dlugosc 2 boku argument4 - kat */ x2 = x1+lengthdir_x(argument2, argument4); y2 = y1+lengthdir_y(argument2, argument4); x3 = x2+lengthdir_x(argument3, argument4+90); y3 = y2+lengthdir_y(argument3, argument4+90); x4 = x3+lengthdir_x(argument2, argument4+180); y4 = y3+lengthdir_y(argument2, argument4+180); x5 = x4+lengthdir_x(argument3, argument4+270); y5 = y4+lengthdir_y(argument3, argument4+270); draw_primitive_begin(pr_trianglestrip); draw_vertex(x1,y1); draw_vertex(x2,y2); draw_vertex(x3,y3); draw_vertex(x4,y4); draw_vertex(x5,y5); draw_primitive_end(); 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ę