MeloPL Opublikowano 27 Maja 2011 Udostępnij Opublikowano 27 Maja 2011 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 Więcej opcji udostępniania...
TheMarcQ Opublikowano 27 Maja 2011 Udostępnij Opublikowano 27 Maja 2011 musisz gdzies dalej w kodzie miec ustawienie predkosci animacji na 0, z tego kodu ktory dales nic nie mozna wywnioskowac Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MeloPL Opublikowano 27 Maja 2011 Autor Udostępnij Opublikowano 27 Maja 2011 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 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ę