Gość Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 Witam. Zacząłem z kolegą robić grę RPG. No i jak na grę przystało, kiedy gracz się porusza powinna być grafika poruszania się. W CREATE gracza mam dwie zmienne: GML global.stoi = 1; global.chodzi = 0; Stoi odpowiada za grafikę wyświetlaną, kiedy gracz stoi w miejscu, a chodzi kiedy gracz się porusza. No i w STEP mam ustawione, że jak speed jest większe niż 0 to ma być odtwarzane GML global.chodzi = 1 ( mam ustawione, że global.chodzi=1 zmienia grafikę i ustawia global.stoi na 0 ), no i jak speed jest mniejsze lub równe zeru to ma być GML global.stoi=1; global.chodzi=0 (też mam tak samo jak w chodzi tylko że inny sprite). No i tu zaczyna się problem. Bo poruszanie nie jest strzałkami tylko myszką się klika i gracz tam idzie. I jeśli ustawione mam, że jeśli punkcik jest to ma do niego iść komendą GML move_towards_point( obj_point.x, obj_point.y, 5 ) to wtedy się zmienia sprite, ale jest taki bug ,że jak kliknę np. za kamieniem to on się zablokuje na kamieniu a ustawione mam, że nie można klikać dwa razy i wtedy już kupa. A jeśli mam ustawione GML mp_potential_step_objects( obj_point.x, obj_point.y, 5 ) to on wtedy omija ten kamień ale nie zmienia grafiki przy chodzeniu. Bardzo proszę o pomoc :) Z góry dziękuję :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Dawka83 Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 mp_potential_step chyba powinno być... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 20 Lutego 2009 Administratorzy Udostępnij Opublikowano 20 Lutego 2009 Wiesz co rozwiązania są chyba dwa. Najpierw jednak pomyśl, czy napewno musisz mieć aż dwie zmienne? Przecież jeżeli global.chodzi = 0 to wiadomo, że stoi, a jak global.chodzi = 1 to wiadomo, ze jest to sytuacja przeciwna. Wydaje mi sie, że ta jedna zmienna wystarczy. Co do rozwiązań: 1) if speed>0 then global.chodzi = 1 else global.chodzi = 0; 2) w kliknięciu dajesz: gloabl.chodzi = 1; w stepie dajesz: if x = obj_point.x and y = obj_point.y then global.chodzi = 0; Lepsze wydaje mi sie pierwsze. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Boro Casso Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 w step dajesz na początku GML if (other.direction>=90 && other.direction<=180) other.sprite_index = sPlayerspr_left1; if (other.direction>=180 && other.direction<=270) other.sprite_index = sPlayerspr_down1; if (other.direction>=270 && other.direction<=360) other.sprite_index = sPlayerspr_right1; if (other.direction>=0 && other.direction<=90) other.sprite_index = sPlayerspr_up1; Puźniej GML if(point_distance(x,y,px,py)>6) { mp_potential_step(px,py,5,0) image_speed = 0.2; }else { image_speed = 0; image_index = 0; } W global mouse left pressed GML if place_free(mouse_x,mouse_y){ px = mouse_x div 32 * 32; py = mouse_y div 32 * 32; direction=round(point_direction(x,y,mouse_x,mouse_y)); A i w create GML image_speed = 0; px=xstart; py=ystart Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gość Opublikowano 20 Lutego 2009 Udostępnij Opublikowano 20 Lutego 2009 gnysek już sprawdzam :) Boro Casso ja używam image_angle więc to z tymi spritami odpada. EDIT: Niestety, to nie działa. Ale poradziłem sobie inaczej :) Ustawiłem, że jeśli gracz dotknie kamienia lub czegoś innego, to punkt znika i trzeba gdzieś indziej kliknąć :) Dzięki Wam za pomoc :bye1: 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ę