Skocz do zawartości

Przez skrypt na poruszanie się, animacja nie działa poprawnie


Fiox

Rekomendowane odpowiedzi

Witam.

Mam animację broni, a dokładnie to odrzutu zamka. Są dwa sprity: jeden to postać z bronią w ręku (spr_player_gun), a drugi to dwu klatkowa animacja postaci z odrzutem zamka i jego powrotem na swoje miejsce (spr_player_shot). Wygląda to tak:

Glob Left Pressed -> sprite_index = spr_player_shot;

Animation end -> if sprite_index=spr_player_shot sprite_index=spr_player_gun

Polega to na tym, że po jednym naciśnięciu LPM animacja wykonywana jest tylko raz, czyli zamek broni w tył i spowrotem.

No i wszystko działa dobrze, do czasu aż dodam skrypt na poruszanie się postaci (w step)

GMLxx = x;

yy = y;

go_up = false;

go_down = false;

go_right = false;

go_left = false;

angle = 0;

if (keyboard_check(vk_up))

{

go_up = true;

}

if (keyboard_check(vk_down))

{

go_down = true;

}

if (keyboard_check(vk_right))

{

go_right = true;

}

if (keyboard_check(vk_left))

{

go_left = true;

}

 

buttons_pushed = (go_up & 1) + (go_right & 1) + (go_left & 1) + (go_down & 1);

 

if (buttons_pushed >= 1 && buttons_pushed <= 2)

{

x_dist = 48;

y_dist = 48;

 

 

if (go_right && go_up)

angle = pi*0.25;

else if (go_up && go_left)

angle = pi*0.75;

else if (go_left && go_down)

angle = pi*1.25;

else if (go_down && go_right)

angle = pi*1.75;

else if (go_right)

angle = 0;

else if (go_up)

angle = pi*0.5;

else if (go_left)

angle = pi;

else if (go_down)

angle = pi*1.5;

 

xx += cos(angle)*x_dist;

yy -= sin(angle)*y_dist;

image_angle = -90 + angle * 180 / pi;

 

 

}

 

if place_free(xx,yy)

{

if mp_linear_step(xx,yy,4,false)

{

entered = true;

if (!keyboard_check(vk_up) && !keyboard_check(vk_down)

&& !keyboard_check(vk_left) && !keyboard_check(vk_right))

{

image_single=0;

image_speed=0;

}

}

}

else

{

xx = x;

yy = y;

}

 

Po dodaniu tego kodu, animacja zatrzymuje się na pierwszej klatce sprita spr_player_shot, czyli tej z zamkiem broni przesuniętym w tył. Dalej nic się nie da zrobić, po ponownym naciśnięciu LPM animacja zostaje tak jak jest, czyli z odrzuconym zamkiem. Dlaczego tak się dzieje i jak temu zapobiec?

 

Pozdrawiam i z góry dziękuje za pomoc :)

Odnośnik do komentarza
Udostępnij na innych stronach

Zadziałało, ponieważ place_free() zwraca false, jeśli jest jakiś obiekt na tej pozycji. U Ciebie postać zatrzymywała się wtedy, gdy nie znalazło przeszkod (czyli zwróciło true) i tu był błąd.

Negacja po prostu zamienia znak liczby, czyli true na false/vice versa. Dzięki temu postać zatrzyma się wtedy, gdy znajdzie przeszkodę.

Odnośnik do komentarza
Udostępnij na innych stronach

Hmm, wcześniej też powinno : /

W takim razie: usuń podany przeze mnie wykrzyknik, a do kodu:

if (!keyboard_check(vk_up) && !keyboard_check(vk_down)

&& !keyboard_check(vk_left) && !keyboard_check(vk_right))

dodaj:

&& sprite_index = spr_player_gun

 

Teraz powinno działać, choć nic nie obiecuję. W przeciwnym wypadku, możesz podesłać mi projekt na PW, naprawię, co trzeba.

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