Threef Opublikowano 2 Kwietnia 2015 Udostępnij Opublikowano 2 Kwietnia 2015 Trochę w to nie wierzę, ale muszę napisać temat w tym dziale. Potrzebuję wiedzieć co jest wewnątrz funkcji move_bounce_solid(). Starałem się przeszukać internet, ale bez większego sukcesu. Zazwyczaj używałem czegoś takiego, ale tym razem się nie sprawdza. GML if(abs(vspeed)<abs(hspeed)) { hspeed*=-1 } else { vspeed*=-1 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am Lord Opublikowano 2 Kwietnia 2015 Udostępnij Opublikowano 2 Kwietnia 2015 A co to nie działa tak jak napisałeś? Mi się zawsze wydawało że dokładnie tak. Chyba że coś takiego: GML if ( !place_free(x+hspeed, y) ) hspeed *= -1; if ( !place_free(x, y+vspeed) ) vspeed *= -1; albo z while Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 2 Kwietnia 2015 Udostępnij Opublikowano 2 Kwietnia 2015 Cóż, ten kod na pewno nie pokrywa zachowania w kątach podzielnych przez 45 i niepodzielnych przez 90, gdzie abs(hspeed) = abs(vspeed). Pod kątem 45 stopni zderzenie z obiektem nad obiektem odbijającym zmniejszy kąt o 90 stopni, podczas gdy zderzenie następuje z obiektem po prawej kąt zwiększa się o 90 stopni. Innymi słowy w pierwszym przykładzie zmienia sie vspeed, a w drugim przykladzie zmienia sie hspeed, chociaz w obu przypadkach jest ten sam kąt (45) i te same hspeed,vspeed. To co podales moze sie przydac na wszystkie wartosci rozne od 45,135, 225 i 315. Dla tych 4 kątów spróbuj ręcznie napisać zachowanie (niby na wpół z dupą ale powinno działać). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 2 Kwietnia 2015 Autor Udostępnij Opublikowano 2 Kwietnia 2015 Ogółem to z chęcią przyjmę wszelakie artykuły na ten temat. Może coś gdzieś dokopię, albo znajdę alternatywny sposób. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
I am vader Opublikowano 2 Kwietnia 2015 Udostępnij Opublikowano 2 Kwietnia 2015 Wydaje sie dzialac w stepie... GML var o = instance_place(x+(hspeed*2),y+(vspeed*2),SolidParent); if o { if y > o.y+o.sprite_height || y+sprite_height < o.y // Vertical change { vspeed*=-1; } else { hspeed*=-1; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 7 Kwietnia 2015 Autor Udostępnij Opublikowano 7 Kwietnia 2015 Okazuje się że najbliższym rozwiązaniem jest: GML if(!place_free(x+hspeed,y)) { hspeed*=-1 } if(!place_free(x,y+vspeed)) { vspeed*=-1 } :huh: Doszedłem do tego po jakiś 16 godzinach dłubania. Teraz zauważyłem że Huder podał to rozwiązanie. To tylko potwierdza te rozwiązanie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 7 Kwietnia 2015 Administratorzy Udostępnij Opublikowano 7 Kwietnia 2015 A move bounce solid nie ma innego działania gdy sprite'y są ustawione jako precise ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 7 Kwietnia 2015 Autor Udostępnij Opublikowano 7 Kwietnia 2015 Ma i jest to argument tej funkcji. Wymaga on oczywiście aby obydwa sprite miały też PCC. Ale mi chodzi o najprostsze rozwiązanie dotyczące AABB, bo zauważyłem że ta funkcja zachowywała się inaczej (lepiej) niż spodziewałem się. Dlatego drążę i próbuję zrozumieć. 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ę