MiChAl200 Opublikowano 7 Lutego 2011 Udostępnij Opublikowano 7 Lutego 2011 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 Więcej opcji udostępniania...
candy Opublikowano 7 Lutego 2011 Udostępnij Opublikowano 7 Lutego 2011 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 Więcej opcji udostępniania...
MiChAl200 Opublikowano 7 Lutego 2011 Autor Udostępnij Opublikowano 7 Lutego 2011 Dzięki, ale to jest platformówka. Czyli on nie może odwrócić się do góry i w dół. Jeśli w czasie naciśnięcia "K" naciśniesz strzałkę w dół, to nie ważne czy jest twarzą w prawo, czy w lewo kopie w dół. Tak samo z górą. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
candy Opublikowano 7 Lutego 2011 Udostępnij Opublikowano 7 Lutego 2011 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 Więcej opcji udostępniania...
MiChAl200 Opublikowano 7 Lutego 2011 Autor Udostępnij Opublikowano 7 Lutego 2011 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 Więcej opcji udostępniania...
candy Opublikowano 7 Lutego 2011 Udostępnij Opublikowano 7 Lutego 2011 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 Więcej opcji udostępniania...
MiChAl200 Opublikowano 8 Lutego 2011 Autor Udostępnij Opublikowano 8 Lutego 2011 Nic mi nie wychodzi..... <_< Wychodziło mi tylko w prawo i lewo, ale w góre i dół już nie.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Caporegime Opublikowano 18 Lutego 2011 Udostępnij Opublikowano 18 Lutego 2011 A może inny sposób Ten ludek który ma zebrać kamień, musi na niego wskoczyć, nacisnąć np. spację, a wtedy kamień znika i pojawia się nad jego głową? Nie będzie problemu z prawem i lewem. 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ę