Skocz do zawartości

Zablokowane Chodzenie


M@ILOSZ

Rekomendowane odpowiedzi

Otórz robie gre w widoku izometrycznym i chce żeby object mógł poruszac sie tylko do góry, dołu na boki i po skosach. Ale on ma iść tam gdzie ja kliknę myszą. I jak by ktoś mógł tojak zrobic ze jak idzie do góry to ma inny sprite niz jak idzie do dołu , w lewo itd.

Odnośnik do komentarza
Udostępnij na innych stronach

I jak by ktoś mógł tojak zrobic ze jak idzie do góry to ma inny sprite niz jak idzie do dołu , w lewo itd.

Ok. tysiąc przykładów. Zreszta nie wiemy, jak masz zrobione chodzenie, czy po x i y, a może vspeed i hspeed, albo może direction i speed?

 

Czyli że idzie tam, gdzie klikniejsz myszą, ale tylko na boki i po skosach? Jest taki przykład - tyle, że tam było tylko na boki - ale powinieneś se poradzić, aby chodził eż po skosie ;-)

Odnośnik do komentarza
Udostępnij na innych stronach

Zrób tak:

Jemu nie o to chodzi. Cxhodzi mu o to, że to ma być takie move_towards_point(), tyle, że po siatce - prawo, lewo, góra, dól i przekątne. Takie..... O, wiem. Taki ruch królowej w szachach - czyli jak najprościej za pomocą dwóch ruchów w szachach dojść do danego punktu.

Odnośnik do komentarza
Udostępnij na innych stronach

Takie cos jest w przykladzie walka rpg ala tibia pietera :P

Wyglada tak:

GML
var gracz;

gracz=instance_nearest(x,y,obj_character);

 

if ( distance_to_object(gracz)<dyst )

{

podazaj=true;

}

else

{

podazaj=false;

}

 

 

if (podazaj==true)

{

 

if (gracz.y>y+63)

{

if (place_free(x,y+32))

k=dol;

else

{

if (gracz.x>x)

k=prawo;

else

k=lewo;

}

}

if (gracz.y<y-63)

{

if (place_free(x,y-32))

k=gora;

else

{

if (gracz.x>x)

k=prawo;

else

k=lewo;

}

}

if (gracz.x>x+63)

{

if (place_free(x+32,y))

k=prawo;

else

{

if (gracz.y>y)

k=dol;

else

k=gora;

}

}

if (gracz.x<x-63)

{

if (place_free(x-32,y))

k=lewo;

else

{

if (gracz.y>y)

k=dol;

else

k=gora;

}

}

}

 

 

switch (k)

{

case gora:

if entered

{

yy -= 32;

entered = false;

sprite_index=spr_up;

k=stoj;

}

break;

 

case dol:

if entered

{

yy += 32;

entered = false;

sprite_index=spr_down;

k=stoj;

}

break;

 

case lewo:

if entered

{

xx -= 32;

entered = false;

sprite_index=spr_left;

k=stoj;

}

break;

 

case prawo:

if entered

{

xx += 32;

entered = false;

sprite_index=spr_right;

k=stoj;

}

break;

 

}

 

if place_free(xx,yy)

{

if mp_linear_step(xx,yy,move_speed,false)

{

entered = true;

if (k=stoj)

{

image_single=0;

image_speed=0;

}

}

}

else

{

xx=x;

yy=y;

}

 

Aha dyst musi byc zdefiniowane w create ale mozna to usunac z tego kodu bo w twoim przypadku zbedne :D

Odnośnik do komentarza
Udostępnij na innych stronach

@saus: przydługawy ten kod

 

Ja proponuję w objekcie gracza w evencie global mouse left:

GML
if distance_to_point(mouse_x,mouse_y)>=5

{var dir;

dir=point_direction(x,y,mouse_x,mouse_y);

if (dir>337.5||dir<=22.5) {direction=0; sprite_index=east;};

if (dir>22.5&&dir<=67.5) {direction=45; sprite_index=northeast;};

if (dir>67.5&&dir<=112.5) {direction=90; sprite_index=north;};

if (dir>112.5&&dir<=157.5) {direction=135; sprite_index=northwest;};

if (dir>157.5&&dir<=202.5) {direction=180; sprite_index=west;};

if (dir>202.5&&dir<=247.5) {direction=225; sprite_index=southwest;};

if (dir>247.5&&dir<=292.5) {direction=270; sprite_index=south;};

if (dir>292.5&&dir<=337.5) {direction=315; sprite_index=southeast;};

speed=5}

else

speed=0;

Jak by co to w global left released ma być jescze speed=0;.

Odnośnik do komentarza
Udostępnij na innych stronach

Gość
Ten temat został zamknięty. Brak możliwości dodania odpowiedzi.
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...