Gość Opublikowano 18 Czerwca 2011 Udostępnij Opublikowano 18 Czerwca 2011 Witam, po długiej przerwie wróciłem do zabawy w GM i na dzień dobry mam problem.. Chcę przerobić skrypt z "Animacja Szkieletowa Top-Down RPG" tak, aby ludek podążał za myszką bez potrzeby klikania prawego klawisza. Udało mi się to, lecz teraz chcę zrobić warunek: JEŚLI pozycja myszy x i y jest równa x i y obiektu o_gracz to działanie 0 Create: GML scr_deklaracja_masek(); var playerpos; playerpos=instance_nearest(x,y,o_gracz); xx=playerpos.x; yy=playerpos.y; dir = 0; sinus = 0; sin_p = 0; dzialanie = 0; ruch = false; pred_ruch = 0; sin_ruch = 0; sin_ruch_p = 0; max_pred_ruch = 5; kasiora = 0; wyzeruj = false; Step: GML scr_deaktywacja_obiektow(); dir = point_direction(x,y,mouse_x,mouse_y); if dzialanie = 0 // Stanie {sinus = sin(degtorad(sin_p))*7; sin_p += 5;} if dzialanie = 1 // Ruch {sinus = sin(degtorad(sin_p))*15; sin_p += pred_ruch*4;} if dzialanie = 2 // Atakowanie {sinus = sin(degtorad(sin_p))*35; sin_p += 20;} if dzialanie = 3 // Czarowanie {sinus = sin(degtorad(sin_p))*27; sin_p += 17;} if (mouse_x)=xx if (mouse_y)=yy if mouse_check_button(mb_none) { ruch = true; wyzeruj = true; } else { if mouse_check_button(mb_left) {dzialanie = 2;scr_wyzeruj();} if mouse_check_button(mb_right) {dzialanie = 3;scr_wyzeruj();} } if ruch = true { pred_ruch = min(pred_ruch,max_pred_ruch); x+= lengthdir_x(pred_ruch,dir+sinus); y+= lengthdir_y(pred_ruch,dir+sinus); pred_ruch+= 0.3; sin_ruch = sinus*0.65; } else { pred_ruch = 0; sin_ruch = 0; } I teraz pytanie: Co zrobić, by dać dwa warunki? Co robię źle i jak powinno to być? I będę wdzięczny jeśli dostanę od razu wyjaśnienie, dlaczego tak, a nie inaczej. Z góry dziękuję. @EDIT I jeszcze jedno pytanie, co zrobić by po naciśnięciu lewego/prawego klawisza animacja ataku/czarowania wykonała się tylko raz i wróciła do animacja chodzenia lub stania? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
MXQ Opublikowano 18 Czerwca 2011 Udostępnij Opublikowano 18 Czerwca 2011 @edit. w evencie Animation End dajesz: GML if sprite_index = spr_atak {sprite_index = spr_stanie} w lewym/prawym klawiszu: GML if sprite_index = spr_stanie {sprite_index = spr_atak} Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 18 Czerwca 2011 Udostępnij Opublikowano 18 Czerwca 2011 Tylko animacja jest tworzona przez skrypty.. Więc to nie będzie chyba działać, nie? @EDIT Z animacjami sobie poradziłem. Teraz mam problem ze staniem gdy kursor jest na obiekcie. GML scr_deaktywacja_obiektow(); dir = point_direction(x,y,mouse_x,mouse_y); if dzialanie = 0 // Stanie {sinus = sin(degtorad(sin_p))*7; sin_p += 5;} if dzialanie = 1 // Ruch {sinus = sin(degtorad(sin_p))*15; sin_p += pred_ruch*4;} if dzialanie = 2 // Atakowanie {sinus = sin(degtorad(sin_p))*35; sin_p += 20;} if mouse_check_button(mb_none) { if ( ( mouse_x = xx ) || ( mouse_y = yy ) ) { ruch = false; dzialanie = 0 } else { ruch = true; wyzeruj = true; dzialanie = 1 } } { ruch = false; dzialanie = 0 { }; }; if mouse_check_button(mb_left) {ruch = false; dzialanie = 2} if ruch = true { pred_ruch = min(pred_ruch,max_pred_ruch); x+= lengthdir_x(pred_ruch,dir+sinus); y+= lengthdir_y(pred_ruch,dir+sinus); pred_ruch+= 0.3; sin_ruch = sinus*0.65; } else { pred_ruch = 0; sin_ruch = 0; } Tak wygląda skrypt Step. Co jest źle? Postać cały czas stoi, może atakować, lecz nie podąża za kursorem.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 21 Czerwca 2011 Udostępnij Opublikowano 21 Czerwca 2011 Do administracji, można podbijać? W regulaminie nie znalazłem zakazu na to, jeśli jest to proszę o usunięcie tego posta i jeśli uznacie to za stosowne to warn. Podbijam, pomoże mi ktoś z tym skryptem? Chodzi mi teraz tylko o ustawienie dla postaci ruch = false i animację stania, gdy kursor będzie nad obiektem o_gracz. Skrypt jest powyżej. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ZyperPL Opublikowano 21 Czerwca 2011 Udostępnij Opublikowano 21 Czerwca 2011 A nie wystarczy: GML if point_distance(x,y,mouse_x,mouse_y)<1 { speed=0 //akcja na brak animacji itd. } ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 21 Czerwca 2011 Udostępnij Opublikowano 21 Czerwca 2011 GML scr_deaktywacja_obiektow(); dir = point_direction(x,y,mouse_x,mouse_y); if dzialanie = 0 // Stanie {sinus = sin(degtorad(sin_p))*7; sin_p += 5;} if dzialanie = 1 // Ruch {sinus = sin(degtorad(sin_p))*15; sin_p += pred_ruch*4;} if dzialanie = 2 // Atakowanie {sinus = sin(degtorad(sin_p))*35; sin_p += 20;} if mouse_check_button(mb_none) { if point_distance(x,y,mouse_x,mouse_y)<1 { ruch = false; dzialanie = 0 } else { ruch = true; wyzeruj = true; dzialanie = 1 } } { ruch = false; dzialanie = 0 { }; }; if mouse_check_button(mb_left) { ruch = false; dzialanie = 2 } if ruch = true { pred_ruch = min(pred_ruch,max_pred_ruch); x+= lengthdir_x(pred_ruch,dir+sinus); y+= lengthdir_y(pred_ruch,dir+sinus); pred_ruch+= 0.3; sin_ruch = sinus*0.65; } else { pred_ruch = 0; sin_ruch = 0; } Postać cały czas stoi. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Makary155 Opublikowano 21 Czerwca 2011 Udostępnij Opublikowano 21 Czerwca 2011 else { ruch = true; wyzeruj = true; dzialanie = 1 } } //else ? { ruch = false; dzialanie = 0 { Brakuje else między klamerkami czy mi się wydaje? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 21 Czerwca 2011 Udostępnij Opublikowano 21 Czerwca 2011 Nie wydaję Ci się :P Działa, ale też opornie.. postać się zatrzymuje tak na 0,1 sekundy i znów idzie.. da się jakoś to zmienić? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
TheMarcQ Opublikowano 22 Czerwca 2011 Udostępnij Opublikowano 22 Czerwca 2011 Nie wiem czemu tak sie dzieje, ale tez nie wiem po co utrudniasz sobie zycie cosinusami i sinusami jak masz do tego lengthdir_x(kat,dlugosc) i lengthdir_y(kat, dlugosc)? e: w sprawie pytania: moze zamiast GML [...]mouse_x,mouse_y)<1 daj wieksza wartosc np. 10 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 22 Czerwca 2011 Udostępnij Opublikowano 22 Czerwca 2011 Może i utrudniam.. ale pobrałem gotowy przykład :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bt9 Opublikowano 30 Grudnia 2011 Udostępnij Opublikowano 30 Grudnia 2011 I interesuje mnie jak rozwiązałeś ten problem aby animacja była odegrana jeden raz gdy klikniesz, a nie że jest odgrywana gdy masz wcisniętą myszke. Jedno klikniecie i odgrywa się sekwencja, po czym wraca do pozycji sprzed klikniecia. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 30 Grudnia 2011 Udostępnij Opublikowano 30 Grudnia 2011 yyy mouse pressed Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bt9 Opublikowano 30 Grudnia 2011 Udostępnij Opublikowano 30 Grudnia 2011 Mouse pressed... to wiem :) ale jak powiedzmy ja rysuję w draw jakiś tam atak za pomocą draw_sprite_ext i tam mam lenghtdiry różne, i to działa na takiej zasadzie, że jak mam wciśniety przycisk myszki to wiadomo animacja idzie zgodnie z lenghtdirami i image angle, ale jak zmienię to na mouse pressed, to wyglada to w ten sposób, ze widać tylko podczas klikniecia że coś tam się zmieniło, ale od razu wraca animacja do początkowej, a ja chcem aby wykonała sie sekwencja faza uderzenia mieczem i faza powrót, jak to zrobić? Mniej więcej. Myślę, że mnie zrozumieliście. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Skowron1993 Opublikowano 30 Grudnia 2011 Udostępnij Opublikowano 30 Grudnia 2011 1. Zamiast zrzynać z przykładu powinieneś stworzyć sobie nowy projekt i w nim nauczyć się( a raczej zrozumieć ) jak działają lengthdir'y 2. Zrób sobię zmienną animacja=false; Po przyciśnięciu myszy( pressed ) zmień zmienną animacja na true; jeśli animacja=true to ma się wykonać seria zmiany wartości danych do lengthdir( czyli poprostu animacja ) i na koniec animacja=false; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
bt9 Opublikowano 30 Grudnia 2011 Udostępnij Opublikowano 30 Grudnia 2011 Kto ci powiedział, że zrzynam z przykładu? To co mówisz, to ja wiem, tylko jak ustawie na true, to animacja - bardziej poruszanie za pomocą image angle i dir - będzie się odgrywała, ok, ale jak zrobić aby w pewnym momencie przestała.. nie za bardzo chcę ustawiać tego w alarmach, wolałbym taki warunek: jeżeli obiekt A znajdzie się w takim a takim miejscu w swoim ruchu ( określonym lenghdirami i cos ) to ma się zatrzymać i więcej nie ruszać, Jak to zrobić? jak sprawdzać w jakim miejscu jestw danym momencie obiekt który rysuję za pomocą draw_sprite_ext? draw_sprite_ext(miecz,global.typ_broni,x+lengthdir_x(-27,(image_angle+80)+30*cos(degtorad(anim))),y+lengthdir_y(-27,(image_angle+80)+30*cos(degtorad(anim))),image_xscale,image_yscale,(image_ang le-40)+60*cos(degtorad(10)),coll,alpha); Raz sprite miecz jest w takim położeniu a raz w takim: | | | | | --------------- Jak sprawdzić w którym w danym momencie? 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ę