Muchaszewski Opublikowano 5 Października 2010 Udostępnij Opublikowano 5 Października 2010 Ciachałem zrobić obracanie się obiektu po kolizji z innym obiektem który również się obraca. Ale coś lengthdir mi nie działa poprawnie więc nie wiem co robić. Mam taki NIEDZIAŁAJĄCY kod: GML if collision_rectangle(lengthdir_x(x,direction),lengthdir_y(y,direction),lengthdir_x(x+32,direction),lengthdir_y(y+32,direction),oBackParent,1,1) {direction += 1} if collision_rectangle(lengthdir_x(x,direction),lengthdir_y(y,direction),lengthdir_x(x-32,direction),lengthdir_y(y-32,direction),oBackParent,1,1) {direction += 1} if collision_rectangle(lengthdir_x(x,direction),lengthdir_y(y,direction),lengthdir_x(x-32,direction),lengthdir_y(y+32,direction),oBackParent,1,1) {direction -= 1} if collision_rectangle(lengthdir_x(x,direction),lengthdir_y(y,direction),lengthdir_x(x+32,direction),lengthdir_y(y-32,direction),oBackParent,1,1) {direction -= 1} Według mnie wszystko jest dobrze. Ale draw mi pokazuje że środek tego obiektu x i y są w punkcie (0,0). Żeby nie było nieporozumień w create dodałem: GML x = 496 y = 240 Czyli wszystko ok. A jednak nie. Proszę o pomoc. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Października 2010 Administratorzy Udostępnij Opublikowano 6 Października 2010 Płynny odbicie na suchego przestwór oceanu. Wiesz, że pierwszy parametr w leghtdir oznacza promień koła z którego liczysz tą pozycję x, a direction kąt pod jakim znajduje się punkt na tym kole? Z tego kodu wynika, ze sprawdzasz czy następuje kolizja w prostokącie, którego końcami są dwa punkty oddalone o 496px i 240px od gracza pod pewnym kątem, oraz szerokie i wysokie jak odległość pewnych punktów o 496+-32px i 240+-32px pod pewnym kątem względem niego. Całkiem spory obszar, wszystkie 4 warunki są zatem spełniane, a te prostokąty się na siebie nakładają gdzieś w 95%. Najpierw sprawdź czym jest lenghtdir, a potem dopiero go używaj. Zobrazuję to tak: masz zegarek i wskazówkę. Wskazówka ma długość 50cm, i wskazuje godzinę 12 (czyli kąt 90 w GM). Pozycja X grota wskazówki (czyli tej strzałki na końcu), to jest lenghtdir_x(50,90), a pozycja Y to lenghtdir_y(50,90). Skoro sprawdzasz pozycję w prostokącie, to po co lenghtdir? Nie wystarczy np. x-32 ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Muchaszewski Opublikowano 6 Października 2010 Autor Udostępnij Opublikowano 6 Października 2010 Już używałem lengthdir i działał tak jak chciałem. Zapomniałem że pozycje x i y uzna za promień koła od (0,0) tylko za środek obiektu. W takim razie wiem gdzie popełniłem błąd. Mój kod powinien chyba wyglądać tak. GML if collision_rectangle(x+lengthdir_x(0,direction),y+lengthdir_y(0,direction),x+lengthdir_x(32,direction),y+lengthdir_y(32,direction),oBackParent,1,1) Dlatego go używam bo ten mój prostokąt ma się obracać, a pozycje x i y nie uwzględniają obrotu. Moje wypociny są nadal źle ale to już kwestia czasu :P Dzięki Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 6 Października 2010 Administratorzy Udostępnij Opublikowano 6 Października 2010 Prostokąt zawsze zostanie prostokątem, tzn. linie będą szły dokładnie pionowo i poziomo, w tej funkcji nie da się tego prostokąta obrócić. To co Ty próbujesz zrobić (ale nieudolnie), to poruszanie jednego z rogów tego prostokąta po okręgu - nie mniej on sam się nie obraca, a zmienia się tylko jego pozycja: 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ę