Skocz do zawartości

Wspinanie się po ścianie


Rekomendowane odpowiedzi

Witam, jestem w trakcie tworzenia platformowej gry akcji na GM8 i robię właśnie różne animacje dla postaci.

Zrobiłem zwisanie z sufitu, bieg, stanie, spadanie, itp., wszystko działa świetnie, ale niestety, z animacją wspinania się po ścianie nie jest już tak pięknie; gdy napisałem:

GML
// Wspina się po ścianie:

if (place_meeting(x+1,y,oBlock) and image_xscale=1 and keyboard_check(vk_up) and keyboard_check(vk_right)) //gdy odwrócony w prawo

{

sprite_index=sPlayerSU;

image_speed=15/room_speed;

image_xscale=1;

}

if (place_meeting(x-1,y,oBlock) and image_xscale=-1 and keyboard_check(vk_up) and keyboard_check(vk_left)) //gdy odwrócony w lewo

{

sprite_index=sPlayerSU;

image_speed=15/room_speed;

image_xscale=-1;

}

 

to postać zaczyna robić animację, ale trwa ona do drugiej klatki, podczas gdy powinna wykonywać wszystkie klatki, których jest 10.

 

Ta animacja się zacina, lecz nie wiem, w czym rzecz. Macie jakiś pomysł, żeby rozwiązać ten problem?

Odnośnik do komentarza
Udostępnij na innych stronach

No więc tego kodu na animacje trochę jest... Jeśli ktoś ma trochę czasu, żeby mi pomóc i znajdzie coś, co blokuje mi tę animację, to będę bardzo wdzięczny. :D

Sam już od ponad godziny tego szukam i naszukać się nie mogę.

 

GML
//w CREATE:

stoi=0.8/room_speed;//prędkość animacji stojacej.

bieg=14/room_speed;//prędkość animacji biegu.

sciana=15/room_speed;//prędkość animacji wchodzenia po ścianie.

sufit=15/room_speed;//prędkość animacji, gdy bohater trzyma się sufitu.

spada=0.9/room_speed;//prędkość animacji, gdy bohater spada.

//w STEP:

// Ruchy na ziemi.

if keyboard_check(vk_right) and hspd>0 //Jesli wciskamy strzalke w prawo

{

sprite_index=sPlayerB; //zaladowuje sie sprite biegania

image_speed=bieg; //predkosc klatek taka, jak w create w bieganiu

image_xscale=1; //obraz odwrocony w prawo

}

if keyboard_check(vk_left) and hspd<0

{

sprite_index=sPlayerB; //zaladowuje sie sprite biegania

image_speed=bieg; //predkosc klatek taka, jak w create w bieganiu

image_xscale=-1; //obraz odwrocony w lewo

}

//Jeśli przestaje biegać, to stoi. LUB jeśli będzie się wciskało klawisz ruchu, lecz on straci prędkość i w ogóle nie będzie się poruszał, to animacja zmienia się na stojaca.

if (keyboard_check_released(vk_right)) or (hspd=0 and keyboard_check(vk_right)) or (place_meeting(x,y+3,oBlock) and image_xscale=1 and image_speed=spada)

{

sprite_index=sPlayerS; //zaladowuje sie sprite stania

image_speed=stoi; //predkosc klatek taka, jak w create w staniu

image_xscale=1; //obraz odwrocony w prawo

}

// To samo co wyzej, tyle, ze w lewo.

if (keyboard_check_released(vk_left)) or (hspd=0 and keyboard_check(vk_left)) or (place_meeting(x,y+3,oBlock) and image_xscale=-1 and image_speed=spada)

{

sprite_index=sPlayerS; //zaladowuje sie sprite stania

image_speed=stoi; //predkosc klatek taka, jak w create w staniu

image_xscale=-1; //obraz odwrocony w lewo

}

 

// Ruchy na suficie.

//stoi na suficie:

if keyboard_check(vk_up) and image_xscale=1 and (abStick && !place_free(x, y-1)) and !keyboard_check(vk_right) and !keyboard_check(vk_left) and image_speed!=sciana// jesli wcisniesz strzalke w gore a postac bedzie odwrocona w prawo, mozna chodzic po suficie i znajdujesz się piksel pod nim, oraz nie wciskasz strzalki w lewo/prawo

{

sprite_index=sPlayerUS; //sprite zmieni sie na trzymajacego sie sufitu

image_speed=sufit; //predkosc animacji dopasuje sie do sprite trzymajacego sie sufitu

image_xscale=1; //bedzie odwrocony w prawo

}

if keyboard_check_released(vk_up) and image_xscale=1 and image_speed=sufit //jeśli się puści sufitu będac odwrocony w prawo

{

sprite_index=sPlayerD; //sprite zmieni sie na spadajacego

image_speed=spada; //predkosc animacji dopasuje sie do sprite spadajacego

image_xscale=1; //bedzie odwrocony w prawo

}

if keyboard_check(vk_up) and image_xscale=-1 and (abStick && !place_free(x, y-1)) and !keyboard_check(vk_right) and !keyboard_check(vk_left) // jesli wcisniesz strzalke w gore a postac bedzie odwrocona w lewo, mozna chodzic po suficie i znajdujesz się piksel pod nim, oraz nie wciskasz strzalki w lewo/prawo

{

sprite_index=sPlayerUS; //sprite zmieni sie na trzymajacego sie sufitu

image_speed=sufit; //predkosc animacji dopasuje sie do sprite trzymajacego sie sufitu

image_xscale=-1; //bedzie odwrocony w lewo

}

if keyboard_check_released(vk_up) and image_xscale=-1 and image_speed=sufit //jeśli się puści sufitu będac odwrocony w lewo

{

sprite_index=sPlayerD; //sprite zmieni sie na spadajacego

image_speed=spada; //predkosc animacji dopasuje sie do sprite spadajacego

image_xscale=-1; //bedzie odwrocony w lewo

}

//idzie po suficie:

if keyboard_check(vk_up) and !place_free(x,y-1) and keyboard_check(vk_right) and hspd>0 and hspd!=0

{

sprite_index=sPlayerUB;

image_speed=sufit;

image_xscale=1;

}

if keyboard_check(vk_up) and !place_free(x,y-1) and keyboard_check(vk_left) and hspd<0 and hspd!=0

{

sprite_index=sPlayerUB;

image_speed=sufit;

image_xscale=-1;

}

// Spadanie:

if (place_free(x,y+1) and image_xscale=1 and image_speed!=sufit and (vspd<1.0 and vspd>0))

{

sprite_index=sPlayerDS;

image_speed=spada;

image_xscale=1;

}

if (place_free(x,y+1) and image_xscale=-1 and image_speed!=sufit and (vspd<1.0 and vspd>0))

{

sprite_index=sPlayerDS;

image_speed=spada;

image_xscale=-1;

}

if (place_free(x,y+1) and image_xscale=1 and image_speed!=sufit and vspd>1.0)

{

sprite_index=sPlayerD;

image_speed=spada;

image_xscale=1;

}

if (place_free(x,y+1) and image_xscale=-1 and image_speed!=sufit and vspd>1.0)

{

sprite_index=sPlayerD;

image_speed=spada;

image_xscale=-1;

}

// Wspina się po ścianie:

if (place_meeting(x+1,y,oBlock) and image_xscale=1 and keyboard_check(vk_up) and keyboard_check(vk_right)) //gdy odwrócony w prawo

{

sprite_index=sPlayerSU;

image_speed=sciana;

image_xscale=1;

}

if (place_meeting(x-1,y,oBlock) and image_xscale=-1 and keyboard_check(vk_up) and keyboard_check(vk_left)) //gdy odwrócony w lewo

{

sprite_index=sPlayerSU;

image_speed=sciana;

image_xscale=-1;

} // Trzyma sie sciany w bezruchu:

if (place_meeting(x+1,y,oBlock) and image_xscale=1 and keyboard_check(vk_right) and !keyboard_check(vk_up))

{

sprite_index=sPlayerSS; //sprite zmienia się na postac trzymajaca sie sciany w bezruchu

image_speed=sciana; //predkosc animacji zwiazanej z interakcja na scianie, domyslnie ustawione na "15/room_speed;"

image_xscale=1; //odwrocone w prawo

}

if (place_meeting(x-1,y,oBlock) and image_xscale=-1 and keyboard_check(vk_left) and !keyboard_check(vk_up))

{

sprite_index=sPlayerSS; //sprite zmienia się na postac trzymajaca sie sciany w bezruchu

image_speed=sciana; //predkosc animacji zwiazanej z interakcja na scianie, domyslnie ustawione na "15/room_speed;"

image_xscale=-1; //odwrocone w lewo

}

 

EDIT. Już do tego doszedłem -> starczyło dopisać we fragmencie "if [...] (hspd=0 and keyboard_check(vk_left)" argument "!image_speed=sciana". Problem rozwiązany, dzięki TheMarcQ za to, ze pomogles ustalic, iz blokada znajduje sie gdzies dalej w kodzie : )

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