Skocz do zawartości

Animacja bohatera podczas wykonywania ruchów w wodzie jest zbyt szybka


pankracy
Przejdź do rozwiązania Rozwiązane przez Konrad-GM,

Rekomendowane odpowiedzi

Witam serdecznie wszystkich:-)

 

 

Kod działa ok ale nie wiem gdzie ustawić animację bohatera kiedy pływa w wodzie.

Kiedy jest bohater w wodzie nieruchomy(idle) to jest ok bo ustawiam tam image_speed z konkretną wartością ale jak poruszam się z nim w wodzie to wtedy jest ta animacja sprita za szybka i to właśnie chciałbym spowolnić.

 

Poniżej kod

 

obj_player

 

Step

 

//Plywanie
swimDir = point_direction(0,0,keyboard_check(kRight)-keyboard_check(kLeft),keyboard_check(kDown)-keyboard_check(kUp));
if abs(keyboard_check(kRight)-keyboard_check(kLeft))+abs(keyboard_check(kDown)-keyboard_check(kUp)) != 0 {
  hspd += lengthdir_x(.5,swimDir);
  if !(swimDir > 0 && swimDir < 180) || place_meeting(x,y-sprite_height/3-1,obj_water) {
   vspd += lengthdir_y(.5,swimDir);
  }
}
if keyboard_check(kUp) && !place_meeting(x,y-sprite_height/1.5,obj_water) && vspd <= 0 {
  vspd = -12;
}
}

 

End Step

 


if sprite_index != spr_hero_water {
  sprite_index = spr_hero_water;
  image_index = 0;
  image_speed = 1; //ustawiam animacje plywania kiedy gracz jest w bezruchu w wodzie
}




if keyboard_check(kRight) && !keyboard_check(kLeft) && image_xscale = -1 {
  image_xscale = 1;

  drawAngle -= 180;
} else if keyboard_check(kLeft) && !keyboard_check(kRight) && image_xscale = 1 {

  image_xscale = -1;
  drawAngle += 180;
}

if abs(keyboard_check(kRight)-keyboard_check(kLeft))+abs(keyboard_check(kDown)-keyboard_check(kUp)) != 0 {
  image_index += 2;

  if image_xscale > 0 {
   drawAngle -= angle_difference(drawAngle,swimDir)/16;
  } else {
   drawAngle -= angle_difference(drawAngle,180+swimDir)/16;
  }
}
}

Dziękuję za każdą pomoc

Odnośnik do komentarza
Udostępnij na innych stronach

  • Rozwiązanie
1 minutę temu, pankracy napisał:

Używalem już.

I tylko działa to kiedy graczem bedąc w wodzie nie wykonuje ruchów lewo prawo góra dół.Jak się poruszę w wodzie obojetnie w jakim kierunku to wtedy przyspiesza animacja sprita.To jest ten problem

4 godziny temu, pankracy napisał:
image_index += 2;

 

Bo ją sam przyśpieszasz, wywal tą linię i z głowy.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

Ja generalnie jestem za tworzeniem tzw. flag, czyli zmiennej, która stwierdza, czy coś jest czy nie. I tak bym zrobił kod. Tzn. całość w tym stylu, żeby było czytelniej:

 

// pseudokod
// 1. najpierw ustal stany postaci
if (costam lub costam lub costam) {
	plywanie = true;
} else {
	plywanie = false;
}

// 2. potem reaguj na nie
// logika od ruchu, animacji itd.
var predkosc_poruszania = plywanie ? 0.5 : 4; // 0.5 jak pływamy, 4 jak nie pływamy
var ruch_poziomo = -keyboard_check(vk_left) + keyboard_check(vk_right); // zwróci -1, 0 lub 1

x += predkosc_poruszania * ruch_poziomo;

if (plywanie = true) {
    if (sprite_index != spr_plywa) {
		sprite_index = spr_plywa;
		image_index = 0;
		image_speed = 0.2;
	}
} else {
   ... // itd.
}

 

W ten sposób trudniej się pogubić, poza tym mając zmienną od stanów, łatwiej je wymuszać i zmieniać w innych przypadkach, a nie zmieniamy zachowania (można np. włączyć pływanie podchodząc do drabinki, czy drzwi, czy wymusić na początku etapu - spoza step tego obiektu).

Odnośnik do komentarza
Udostępnij na innych stronach

1 godzinę temu, gnysek napisał:

Ja generalnie jestem za tworzeniem tzw. flag, czyli zmiennej, która stwierdza, czy coś jest czy nie. I tak bym zrobił kod. Tzn. całość w tym stylu, żeby było czytelniej:

 

// pseudokod
// 1. najpierw ustal stany postaci
if (costam lub costam lub costam) {
	plywanie = true;
} else {
	plywanie = false;
}

// 2. potem reaguj na nie
// logika od ruchu, animacji itd.
var predkosc_poruszania = plywanie ? 0.5 : 4; // 0.5 jak pływamy, 4 jak nie pływamy
var ruch_poziomo = -keyboard_check(vk_left) + keyboard_check(vk_right); // zwróci -1, 0 lub 1

x += predkosc_poruszania * ruch_poziomo;

if (plywanie = true) {
    if (sprite_index != spr_plywa) {
		sprite_index = spr_plywa;
		image_index = 0;
		image_speed = 0.2;
	}
} else {
   ... // itd.
}

 

W ten sposób trudniej się pogubić, poza tym mając zmienną od stanów, łatwiej je wymuszać i zmieniać w innych przypadkach, a nie zmieniamy zachowania (można np. włączyć pływanie podchodząc do drabinki, czy drzwi, czy wymusić na początku etapu - spoza step tego obiektu).

 

Dzięki chłopaki za pomoc.

Twój kod jest bardziej czytelniejszy dla mnie.

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