Skocz do zawartości

Przy innym kodzie nie zmienia sprite.


Gość

Rekomendowane odpowiedzi

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

  • Administratorzy

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

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

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

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