Skocz do zawartości

Ślizgający się Sprite


JTay

Rekomendowane odpowiedzi

Prosty, acz upierdliwy problem.

Słabo rozumiem GML, chociaż pomimo chęci do nauki nie przyswoiłem go sobie.

Ostatnio zająłem się produkcją przygodówki. Nic takiego, prosta grafika 2D... W tej grze jest Explorer. On ma za zadanie przemierzać piramidy(i nie tylko).

Aby to jakoś wyglądało, ustawiłem opcję zmiany sprite'ów co kliknięcie klawisza na klawiaturze. I tak:

Gdy trzyma się strzałkę w lewo, jest dobrze. Gdy będziemy trzymać strzałkę w lewo i w górę razem, nic takiego się nie dzieje. Ale jeśli nadal trzymamy strzałkę w lewo i puścimy strzałkę w górę, Explorer się ślizga, ponieważ ustawione jest, że gdy jakiś przycisk zostanie puszczony, sprite zamienia się na stojącego w miejscu Explorera. Ale on się nadal porusza. I tak właściwie, ślizga się. Dla tych, którzy nie zrozumieli, udostępniam link do gry:

mega.co.nz

mega.co.nz/#!nRATGJwR!JTcK60eldfkxZNH3eH2eyGYmQ9tFSFaeer8vKivHKzE

hostuje.net

hostuje.net/file.php?id=a36c5fd64a17a8f1d443a9b9580709b7

 

(Nie jest za dobra, ale cóż, od czegoś trzeba zacząć)

Jeśli mógłby mi pomóc, byłbym wdzięczny.

Odnośnik do komentarza
Udostępnij na innych stronach

Na początku sprawdzaj czy any key został puszczony, a potem dopiero czy któryś jest wciśnięty.

GML
if(keyboard_check_released(vk_anykey) {/*ustaw animacje na 0*/}

if(keyboard_check(vk_left)

{/*idź w lewo i zmień animacje*/}

.... dalej w prawo w górę i w dół

mniej więcej tak i to w step

 

i gry możesz wrzucać na GMClanowy uploader

up.jpg

Odnośnik do komentarza
Udostępnij na innych stronach

A więc - na logikę, i bez żadnej wiedzy na temat GML postanowiłem coś napisać. Ktoś wytłumaczy co jest źle? Bo wiem, że coś na pewno.

GML
{

 

if(keyboard_check_released(vk_anykey)

then (sprite_replace_sprite(explorer_up_nomove))

if(keyboard_check(vk_left)

if true then (sprite_replace_sprite(explorer_left))

if false then (sprite_replace_sprite(explorer_left_nomove))

if(keyboard_check(vk_right)

if true then (sprite_replace_sprite(explorer_right))

if false then (sprite_replace_sprite(explorer_right_nomove))

if(keyboard_check(vk_up)

if true then (sprite_replace_sprite(explorer_up))

if false then (sprite_replace_sprite(explorer_up_nomove))

if(keyboard_check(vk_down)

if true then (sprite_replace_sprite(explorer_down))

if false then (sprite_replace_sprite(explorer_down_nomove))

Odnośnik do komentarza
Udostępnij na innych stronach

True i False są stałymi (Prawda, fałsz). Warunek IF w GM jest taki sam jak wszędzie.

 

Ułatwię Ci i podam gotowy kod:

GML
if(keyboard_check(vk_left)

{

sprite_replace_sprite(explorer_left)

}

 

(...)

 

if(keyboard_check_released(vk_anykey)

{

sprite_replace_sprite(explorer_up_nomove)

}

 

Ogółem nie polecam keyboard_check_released(vk_anykey) lepiej zrobić jeden większy warunek sprawdzający same klawisze kierunkowe:

 

if !(keyboard_check(vk_right) or keyboard_check(vk_left) or keyboard_check(vk_up) or keyboard_check(vk_down))

Odnośnik do komentarza
Udostępnij na innych stronach

Dziękuję bardzo.

P.S Gra jest już prawie gotowa. Prawie, oznacza że pomimo niedokończonej fabuły zakańczam ją i robię w nowym silniku. (Game Maker 8 jest troszkę okrojony, a na Studio nie mogę się przerzucić z wielu powodów) Choć trzeba przyznać że forum to posiada bardzo przyjazną społeczność :)

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