Skocz do zawartości

Problem z lengthdir


Rekomendowane odpowiedzi

Kolejny ja mam problem. Chciałbym zrobić skrypt budowania coś ala Unturned i napotkałem następujący błąd/problem.

lengthdirProblem.png

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

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

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

  • Administratorzy

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

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

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...