Poo-ding Opublikowano 24 Listopada 2011 Udostępnij Opublikowano 24 Listopada 2011 Witam :) Mam mały problem mam jednak nadzieję, że udzielicie mi pomocy :) object0 ma zmienne xx1 = -30 ; yy1=50 ; xx2=40 ; yy2=- 15 . Zmienne te mają tworzyć linię, która powiedzmy jest narysowana przez object_draw za pomocą GML with object0 {draw_line(xx1,yy1,xx2,yy2) }. W grze bierze udział także object1. Chciałbym, żeby w momencie gdy object1 "zetknie" się z linią której współrzędne wyznaczają zmienne obiektu object0 (xx1,yy1,xx2,yy2) wydarzyło się coś np. object1 ulegnie zniszczeniu. Największy problem mam z ustaleniem momentu "zetknięcia" objectu1 z linią wyznaczoną przez object0. Początkowo myślałem, że funkcja collision_line będzie tu pomocna, ale okazało się, że służy ona do zupełnie czegoś innego. Mając w pamięci lekcje matematyki z liceum, postanowiłem posłużyć się właściwościami funkcji liniowej i zrobiłem następującą rzecz: Dla objectu0 (ściślej : dla linii którą tworzy) wyznaczyłem współczynnik kierunkowy GML m=(yy2-yy1)/(xx2-xx1) a dla objectu1 GML if x>object0.xx1 if x<object0.xx2 if y>object0.yy2 if y<object0.yy1 if (y-(object0).yy1)/(x-(object0).xx1)=object0.m instance destroy() Podany sposób niby działa, ale jest bardzo niedokładny, jest to związane tym, że współczynnik kierunkowy zmienia się dość w szalony sposób . Może znacie jakiś bardziej elegancki sposób na to by zapisac w kodzie interakcje z linią która nie jest osobnym obiektem, której współrzędne są zmiennymi jakiegoś obiektu, i która jest linią nie pionową ani nie poziomą lecz ukośną ? Zgaduję, że to bardziej problem matematyczny, mam nadzieje jednak, że ktoś będzie potrafił mi pomóc :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
hudy0070 Opublikowano 24 Listopada 2011 Udostępnij Opublikowano 24 Listopada 2011 GML collision_line(x1,y1,x2,y2,object0,true,false) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Poo-ding Opublikowano 24 Listopada 2011 Autor Udostępnij Opublikowano 24 Listopada 2011 Niestety powyższy kod nie działa, object1 po zetknięciu z linią nie znika, nie ma pomiędzy nimi interakcji :( Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
sagi Opublikowano 30 Listopada 2011 Udostępnij Opublikowano 30 Listopada 2011 a jak użyłeś tego kodu? jeśli użyłeś go jako warunek to powinien zadziałać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 30 Listopada 2011 Administratorzy Udostępnij Opublikowano 30 Listopada 2011 Chyba wiem o co chodzi - linia ma grubość 1px, a obiekt np. prędkość 4px. To znaczy, że pomiędzy klatkami tak naprawdę "przeskoczy" linkę (stoi 1px przed linką, +4px daje nam 2px za linką). Jednakże, jeśli maska tego obiektu ma większą szerokość i wysokosć niż jego prędkość, kod: GML var _id; _id = collision_line(x1,y1,x2,y2,object1,false,false); if (_id > 0) { with (_id) instance_destroy(); } Ten kod niszczy tylko object1 który dotyka linii, jeśli na planszy są dwa. 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ę