XivroX Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 Witam :) Mam pytanie: Jak zrobić, aby image_xscale objektu A było takie jak odległość od punktu B do punktu C? Czy da się tak zrobić? Pozdro ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 O.o Nie do końca rozumiem. O coś takiego ci chodzi...? GML image_xscale = odleglosc/sprite_width Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XivroX Opublikowano 14 Listopada 2008 Autor Udostępnij Opublikowano 14 Listopada 2008 Nie, mi chodzi raczej o to że między punktami B i C jest x pixeli odległości, a image_xscale objektu A jest równe x. Chciałbym zrobić linię lecz bez udziału draw_line() - całkiem by to zepsuło rozgrywkę... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Nobody Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 image_scale = point_distance( B.x, B.y, C.x, C.y ) / sprite_width ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 Czyli po prostu skalować prostokątny sprite tak, aby wyglądał jak linia (tak odpowiednio się zeskalował, aby był tak duży, jak odległość od puntu B do C)? To masz ten kod, co dałem :P Powinie działać. Ew. masz kod na linię z antyaliasingiem - ja się dzielę kodem, nie tak jak PsichiX (haha! :P) GML // draw_aa_init() _surf = surface_create(64, 3); surface_set_target(_surf); draw_clear_alpha(c_black, 1); draw_set_color(c_white); draw_set_alpha(1); draw_line(0, 1, 64, 1); globalvar spr_aa_line; spr_aa_line = sprite_create_from_surface(_surf, 0, 0, 64, 3, 1, 1, 0, 1, 0, 1); surface_reset_target(); GML // draw_line_aa(x1, y1, x2, y2, color, alpha); // // Drawing an anti-aliasing line // by Dawidds =D _dist = point_distance(argument0, argument1, argument2, argument3) / 64; _dir = point_direction(argument0, argument1, argument2, argument3); texture_set_interpolation(1); draw_sprite_ext(spr_aa_line, 0, argument0, argument1, _dist, 1, _dir, argument4, argument5); texture_set_interpolation(0); Masz tu coś podobnego (obliczanie zmiennej _dist) :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 Ale czemu bez draw line ? Robisz linę ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XivroX Opublikowano 14 Listopada 2008 Autor Udostępnij Opublikowano 14 Listopada 2008 ___________________________________________ ERROR in action number 1 of Step Event for object object1: Error in code at line 2: image_xscale=point_distance(30,30,30,30)/sprite_width at position 46: Division by 0. Wyskakuje taki błąd... Za chwilę wrzucę na translatora to się dowiem czego dotyczy xD Tego z antyaliasingiem jeszcze nie testowałem (za chwilę) Edit: Aaaa... a więc "division by 0" znaczy "podział przez 0" już rozumiem xD Edit2: Ale ciągle tego jakże trudnego zagadnienia rozwiązać nie mogę... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Pental Stary Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 Bo ten kod nie jest odporny na wyjątek, załóżmy, że sprite_width = 0, jak można dzielić przez zero? No i pokaż Dawid jak ten sprite wygląda... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
XivroX Opublikowano 14 Listopada 2008 Autor Udostępnij Opublikowano 14 Listopada 2008 BUAHAHAHAHAHA! Śmieję z siebie Już naprawiłem kod. Błąd był w tym, że nieodpowiednio ustawiłem funkcję point_distance() Wszystkie argumenty były równe 30, a więc dystans był równy 0 Dzięki za pomoc. =D Teraz działa Edit: Pewnie przez następny tydzień się będę z tego śmiał. xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawidds Opublikowano 14 Listopada 2008 Udostępnij Opublikowano 14 Listopada 2008 Tylko sprecyzuję... Uzjel, Pental - nie sprawdzaliście, a komentujecie ^_^ W draw_aa_init() tworzę sprite linii o szerokości 64. Po to tworzę to dynamicznie, aby móc se ustawić "jakość" tejże linii (właśnie to 64). Zaś w draw_line_aa() wykorzystuje GM'owy system interpolacji pixeli, aby namalować odpowiednio obrócony sprite kreski, o odpowiedniej skali. I wuala, czy jak to się tam pisze :P PS: O, GMC nie koloruje globalvar :D 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ę