Skocz do zawartości

Kolejnosc wykonywania kodu i przesuwanie skrzynek


OriPL

Rekomendowane odpowiedzi

Witam postanowiłem od początku zacząć pisać LabEscape, bo wraz z formatem zginą mi projekt... w tamtym i w aktualnym projekcie mam taki pewien problem...

 

Chce dostać taki efekt że jak postawie 3 skrzynki na sobie i przesune tą na samym dole to skrzynki na górze również się przesuwają... efekt uzyskałem lecz nie jest on zbyt elastyczny... otóż problem polega na tym że jeżeli w edytorze postawie skrzynki od dołu to wszystko działa jak należy... jednak jeżeli będę stawiał skrzynki od góry to już się nic nie przesuwa... skrzynki nie reagują... problem pokaże obrazek:

 

36779458093783386663.png

 

Kod na przesuwanie w STEP:

GML
box_id = collision_line(x-16,y+17,x+16,y+17,obj_box_normal,0,1);

 

if box_id != -4

{

x -= box_id.xprevious - box_id.x;

}

Odnośnik do komentarza
Udostępnij na innych stronach

E:Wdg. mnie ten kod nie ma prawa nie działać.

A jednak...

 

Spróbuj tak

GML
if x!=xprevious

{

obj = collision_rectangle(x,y,x+16,y-16,skrzynka,1,1)

if obj!=-4

{

obj.x -= x - xprevious

}

}

 

Niestety w ogóle nie działa (oczywiscie zmieniłem wartości by pokrywały całą skrzynie a nawet trochę więcej (metoda prób i błędów)

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz sprawdza po ukosie :/

 

GML
box_id = collision_line(x+16,y+17,x+16,y-17,obj_box_normal,0,1);

 

if box_id

{

x -= box_id.xprevious - box_id.x;

}

 

Ten jest dobrze.

 

E: w sumie można to zrobić jeszcze lepiej:

GML
box_id = collision_point(x+16,y-16,obj_box_normal,0,1)

if(box_id) box_id.x = x

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz sprawdza po ukosie :/

 

GML
box_id = collision_line(x+16,y+17,x+16,y-17,obj_box_normal,0,1);

 

if box_id

{

x -= box_id.xprevious - box_id.x;

}

 

Ten jest dobrze.

 

E: w sumie można to zrobić jeszcze lepiej:

GML
box_id = collision_point(x+16,y-16,obj_box_normal,0,1)

if(box_id) box_id.x = x

 

 

A po jakiego grzyba mam sprawdzać po ukosie?? Chryste...

 

Drugi kod były poprawny gdyby nie fakt że skrzynki nie zawsze stoją idealnie na sobie... inaczej mówiąc gdy przesunę tą niżej to ta wyżej mocno skoczy... powtarzam... mój kod działa ale jest problem z kolejnością wykonywania kodu...

 

Jeżeli kłade skrzynki od dołu do góry... to działa... gdy na odwrót to nie... inaczej mówiąc w drugim przypadku kod skrzyni na samym dole wykonuje się jako ostatni... a teoretycznie powinien jako pierwszy by cała reszta mogła zareagować...

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Możesz dać kod w kolizji z ludzikiem i w pętli sprawdzać czy stoją skrzynki powyżej (while collision_line > -1) i wtedy będzie zawsze od dołu do góry. No i skrzynki przesuną się w tym samym stepie, zatem w tej samej klatce obrazu.

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ę...