Threef Opublikowano 2 Kwietnia 2015 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 }
I am Lord Opublikowano 2 Kwietnia 2015 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
I am vader Opublikowano 2 Kwietnia 2015 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ć).
Threef Opublikowano 2 Kwietnia 2015 Autor 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.
I am vader Opublikowano 2 Kwietnia 2015 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; } }
Threef Opublikowano 7 Kwietnia 2015 Autor 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.
Administratorzy gnysek Opublikowano 7 Kwietnia 2015 Administratorzy Opublikowano 7 Kwietnia 2015 A move bounce solid nie ma innego działania gdy sprite'y są ustawione jako precise ?
Threef Opublikowano 7 Kwietnia 2015 Autor 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ć.
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ę