Skocz do zawartości

Kopalnia


Rekomendowane odpowiedzi

Chcę zrobić tak, by po naciśnięciu "K" gdy ludzik stoi przy kamieniu to, żeby odkopał go jak w kopalni. (bez animacji, po prostu zniknięcie objektu wall_kop)

Chciałbym jednak zrobić tak:

 

- Jeżeli jest ludzik skierowany w prawo, to odkopuje kamień z prawej strony, czyli twarzą do ściany.

- Jeśli jest ludzik skierowany w lewo, to odkopuje kamień z lewej, strony, czyli też twarzą do ściany.

- Jeśli jednak przy naciśnięciu i "K" i strzałki w dół to odkpouj kamień bezpośrednio pod nim

- A gdy "K" i go góry to kamień bezpośrednio nad nim.

 

Wiem, że to trochę, dużo, ale nie wiem jak to zrobić...

Odnośnik do komentarza
Udostępnij na innych stronach

Trzeba pobrać id odpowiedniego kamienia. Stwórzmy dodatkowo zmienną "strona", która przechowuje informację, w którą stronę jest obrócony bohater.

GML
//===create

strona=1; //1- obrócony w prawo, 2-obrócony w dół, 3- obrócony w lewo, 4-obrócony do góry

//===event naciśnięcia K

if(strona==1)// jeżeli bohater jest obrócony w prawo...

{

if(collision_point(x+x_o,y+y_o,wall_kop,1,0))//... sprawdź czy po prawo od niego jest obiekt wall_kop...

{

with collision_point(x+x_o,y+y_o,wall_kop,1,0) instance_destroy()//... jeżeli tak, to usuń ten obiekt wall_kop

}

}

else if(strona==2) // analogicznie jak wyżej</span>

Pod zmienną x_o i y_o podstaw odpowiednie wartości. Nie wiem jakie są wymiary poszczególnych spritów u Ciebie, dlatego tak to zapisałem. Musisz jeszcze dodać przy naciskaniu strzałek linijkę kodu, która będzie zmieniała wartość zmiennej strona.

Odnośnik do komentarza
Udostępnij na innych stronach

To zróbmy to tak:

GML
//event naciśnięcia klawisza K

if(keyboard_check(vk_up))//gdy naciśnięty jest klawisz do góry...

{

if(collision_point(x,y-30_o,wall_kop,1,0))//... sprawdź czy jest kolizja od góry z wall_kop...

{

with collision_point(x,y-30,wall_kop,1,0) instance_destroy()//.. jeżeli tak, to usuń ten obiekt

}

}

else if(keyboard_check(vk_down))//jeżeli nie naciśniętego klawisza strzałka góra, to sprawdź czy jest naciśnięty klawisz do dołu...

{

if(collision_point(x,y+30_o,wall_kop,1,0))//... rób analogicznie jak wyżej

{

with collision_point(x,y+30,wall_kop,1,0) instance_destroy()

}

}

else//... jeżeli nie naciskamy ani strzałkę do góry ani do dołu, to...

{

if(collision_point(x+30*image_xscale,y_o,wall_kop,1,0))// to sprawdź czy jest obok bohatera obiekt wall_kop

{

with collision_point(x+30*image_xscale,y,wall_kop,1,0) instance_destroy()

}

}

Założyłem tutaj, że bohater jest obracany za pomocą funkcji image_xscale. Ja zawsze dodaje sprity tak, aby były odwrócone w prawo. Wtedy mam, że gdy postać stoi odwrócona w prawo to jej image_xscale=1, jak w lewo to -1.

 

Dzięki czemu, skróciliśmy kod (nie musimy rozpatrywać oddzielnie dwóch przypadków).

Odnośnik do komentarza
Udostępnij na innych stronach

nie używam tego image_xscale

Mam taki kod na chodzenie:

 

GML
if place_free(x,y+1)

{gravity = 0.5}

else

{gravity = 0}

 

if (keyboard_check(vk_left))

{

if place_free(x-4,y)

{x-=4}

sprite_index=ludzik_left;

image_speed=3;

strona=2;

}

 

else if (keyboard_check(vk_right))

{

if place_free(x+4,y)

{x+=4}

sprite_index=ludzik_right;

image_speed=3;

strona=1;

}

 

else

{

image_speed=0;

}

 

if (keyboard_check(vk_space))

{

if ! place_free(x,y+1)

{vspeed = -10}

 

if (keyboard_check(vk_right))

{

sprite_index=ludzik_right_jump;

}

 

if (keyboard_check(vk_left))

{

sprite_index=ludzik_left_jump;

}

 

}

 

I tamten kod nie działa.

 

A, i wszystkie sprity mają 32 na 32 pix

Odnośnik do komentarza
Udostępnij na innych stronach

To przerób kod, który Ci napisałem. Musisz zamienić ostatni else na dwa inne:

GML
// dwa pierwsze porównania plus

else if(sprite_index==ludzik_right||sprite_index==ludzik_right_jump itd)

{

//warunek bez zmian na prawo

}

else

{

//warunek bez zmian na lewo

}

Musisz oczywiście zmienić wartości, które Ci podałem w argumentach funkcji. Wszystko zależy gdzie masz ustawiony Origin sprite'a.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

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