Mateusz Nejman Opublikowano 29 Stycznia 2015 Udostępnij Opublikowano 29 Stycznia 2015 Kolejny ja mam problem. Chciałbym zrobić skrypt budowania coś ala Unturned i napotkałem następujący błąd/problem. czerwony obiekt to obj_ściana zielony obiekt to obj_fundament spr_sciana ma rozmiar 32x2 x_origin = 16; y_origin = 1 spr_sciana ma rozmiar 32x32 x_origin = 16; y_origin = 16 CREATE obj_sciana: GML x=x y=y dir=0 STEP obj_sciana: GML if keyboard_check_pressed(ord('1')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x-lengthdir_x(16,dir+90) y = y-lengthdir_y(16,dir+90) } if keyboard_check_pressed(ord('2')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+90) y = y+lengthdir_y(16,dir+90) } if keyboard_check_pressed(ord('3')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction+90 x = obj_fundament.x-lengthdir_x(16,dir) y = obj_fundament.y+lengthdir_y(16,dir) } if keyboard_check_pressed(ord('4')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction+90 x = obj_fundament.x+lengthdir_x(16,dir) y = obj_fundament.y-lengthdir_y(16,dir) } direction = dir image_angle = direction Problem jest przy opcji 3 i 4, ponieważ tak jakby przesuwa obj_sciana o 1px w inną stronę. Gdzie tu mam błąd? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 29 Stycznia 2015 Udostępnij Opublikowano 29 Stycznia 2015 Nie mam za bardzo pomysłu, ale nie zaszkodzi spróbować zrobić. GML floor(lengthdir_x(16,dir))alboGML round(lengthdir_x(16,dir)) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
en_6280 Opublikowano 29 Stycznia 2015 Udostępnij Opublikowano 29 Stycznia 2015 jak analizuję ten kod z tym co przeczytałem tu: http://docs.yoyogames.com/source/dadiospic...engthdir_x.html to mi się nic nie zgadza. Rozumiem że obiekt fundament jest już na początku obrócony o 45 stopni. Ja bym zrobił tak że biore pkt środkowy fundamentu, następnie szukam środka obiktu sciana -czyli przesuwam pkt srodkowy obiektu fundament go o wektor w lewo w prawo gora dol (Ty robisz ciągle w jedna stronę) i nadał direction dla przykladu 1 i 2 taki sam jak fundamentu, a dla przykladu 3 i4 plus 90 stopni. Edit, 1 tzn zmieniasz ćwiartki plusem i minusem ale poco to robić jak masz przecież funkcje lenghdir która Tobie sama to zrobi i zawsze ok Edit. 2 na tej stronce co podalem jest rysunek który bardzo dobrze obrazuje jej działanie Edit 3 moja propozycja: (założyłem że początkowo ściane narysowałem w pionie, jeżeli w poziomie to to ostanie linijki z ifów (te dir=) przezuc z "3" i "4" do "1" i "2" jak coś nie mam gm więc to robiłem tak teoretycznie Edit 4. Dobra widze ze rysowałem w poziomie, poprawione: GML if keyboard_check_pressed(ord('1')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+90) y = y+lengthdir_y(16,dir+90) dir = obj_fundament.direction-90 } if keyboard_check_pressed(ord('2')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+270) y = y+lengthdir_y(16,dir+270) dir = obj_fundament.direction-90 } if keyboard_check_pressed(ord('3')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+0) y = y+lengthdir_y(16,dir+0) } if keyboard_check_pressed(ord('4')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+180) y = y+lengthdir_y(16,dir+180) } direction = dir image_angle = direction Edit 4. W sumie korzystanie z lenghtdir jest nie potrzebne bo znasz szerokość i wysokość obiektów, masz pkt odniesenia, i poruszasz się po osiach tylko albo x albo y (w lokalnym ukladzie odniesienia), potem wystarczy obrócić no ale jak to woli. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mateusz Nejman Opublikowano 29 Stycznia 2015 Autor Udostępnij Opublikowano 29 Stycznia 2015 jak analizuję ten kod z tym co przeczytałem tu: http://docs.yoyogames.com/source/dadiospic...engthdir_x.html to mi się nic nie zgadza. Rozumiem że obiekt fundament jest już na początku obrócony o 45 stopni. Ja bym zrobił tak że biore pkt środkowy fundamentu, następnie szukam środka obiktu sciana -czyli przesuwam pkt srodkowy obiektu fundament go o wektor w lewo w prawo gora dol (Ty robisz ciągle w jedna stronę) i nadał direction dla przykladu 1 i 2 taki sam jak fundamentu, a dla przykladu 3 i4 plus 90 stopni. Edit, 1 tzn zmieniasz ćwiartki plusem i minusem ale poco to robić jak masz przecież funkcje lenghdir która Tobie sama to zrobi i zawsze ok Edit. 2 na tej stronce co podalem jest rysunek który bardzo dobrze obrazuje jej działanie Edit 3 moja propozycja: (założyłem że początkowo ściane narysowałem w pionie, jeżeli w poziomie to to ostanie linijki z ifów (te dir=) przezuc z "3" i "4" do "1" i "2" jak coś nie mam gm więc to robiłem tak teoretycznie Edit 4. Dobra widze ze rysowałem w poziomie, poprawione: GMLif keyboard_check_pressed(ord('1')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+90) y = y+lengthdir_y(16,dir+90) dir = obj_fundament.direction-90 } if keyboard_check_pressed(ord('2')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+270) y = y+lengthdir_y(16,dir+270) dir = obj_fundament.direction-90 } if keyboard_check_pressed(ord('3')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+0) y = y+lengthdir_y(16,dir+0) } if keyboard_check_pressed(ord('4')){ x = obj_fundament.x y = obj_fundament.y dir = obj_fundament.direction x = x+lengthdir_x(16,dir+180) y = y+lengthdir_y(16,dir+180) } direction = dir image_angle = direction Edit 4. W sumie korzystanie z lenghtdir jest nie potrzebne bo znasz szerokość i wysokość obiektów, masz pkt odniesenia, i poruszasz się po osiach tylko albo x albo y (w lokalnym ukladzie odniesienia), potem wystarczy obrócić no ale jak to woli. Pokazałbyś przykładowy kod? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 29 Stycznia 2015 Udostępnij Opublikowano 29 Stycznia 2015 A nie możesz ustawić origin ściany na [16,16]? Noobowskie rozwiązanie ale działa. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Stycznia 2015 Administratorzy Udostępnij Opublikowano 29 Stycznia 2015 Ja chciałem to samo zaproponować. Wtedy ustawiasz na x = obj_fundament.x + 16 i problem z głowy. Mi się wydaje, że przez ten origin na y=1 to Ci ucieka piksel przy obrocie. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mateusz Nejman Opublikowano 29 Stycznia 2015 Autor Udostępnij Opublikowano 29 Stycznia 2015 Ja chciałem to samo zaproponować. Wtedy ustawiasz na x = obj_fundament.x + 16 i problem z głowy. Mi się wydaje, że przez ten origin na y=1 to Ci ucieka piksel przy obrocie. A z kolizjami wtedy nie będzie problemu? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 29 Stycznia 2015 Udostępnij Opublikowano 29 Stycznia 2015 Maska będzie bez zmian. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 29 Stycznia 2015 Administratorzy Udostępnij Opublikowano 29 Stycznia 2015 a jak obracasz, to zmień image_angle i maska się też obróci :) Taka sztuczka ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Mateusz Nejman Opublikowano 29 Stycznia 2015 Autor Udostępnij Opublikowano 29 Stycznia 2015 Zmieniłem origin na 16;16 i dalej mam problem z lewą i dolną opcją(dalej jest odskok 1px). Teraz kod tak wygląda GML var o; o=obj_fundament; if keyboard_check_pressed(ord('1')){ dir = o.direction } if keyboard_check_pressed(ord('2')){ dir = o.direction+90 } if keyboard_check_pressed(ord('3')){ dir = o.direction+180 } if keyboard_check_pressed(ord('4')){ dir = o.direction+270 } x=o.x y=o.y direction = dir image_angle = direction 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ę