Skocz do zawartości

Problemy z przeciwnikami


Adriann

Rekomendowane odpowiedzi

Witajcie!

Przychodzę dziś do was z takim dość dziwnym problemem, otóż mam w grze przeciwnika który skacze w stronę gracza.

step:

GML
///Poruszanie

if tryb=1 && (place_meeting(x,y+(vsp),blok_parent)) && alarm[1]=-1 //Przygotowanie do skoku

{alarm[1]=10

movespeed=0

sprite_index=spr_jumper01_stoi}

//Skakanie

if tryb=2 && alarm[2]=-1

{vsp=-5

movespeed=2

dir=-1

alarm[2]=1

sprite_index=spr_jumper01_atk}

 

 

 

if tryb=3 && alarm[2]=-1

{vsp=-5

movespeed=2

dir=1

alarm[2]=1

sprite_index=spr_jumper01_atk}

 

 

hsp = dir * movespeed;

vsp += grav;

 

image_xscale=dir;

 

//Horizontal Collision

if (place_meeting(x+hsp,y,blok_parent))

{

while(!place_meeting(x+sign(hsp),y,blok_parent))

{

x += sign(hsp);

}

hsp = 0;

 

dir *= -1;

}

x += hsp;

 

//Vertical Collision

if (place_meeting(x,y+vsp,blok_parent))

{

while(!place_meeting(x,y+sign(vsp),blok_parent))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

Alarm[1]

GML
if instance_exists(o_gracz)

{

if o_gracz.x<x tryb=2

if o_gracz.x>x tryb=3

}

Alarm[2]

GML
tryb=1

W alarmach wybiera kierunek i resetuje całość.

 

I to wszytko pięknie działa.

ALE! Kiedy próbuję zrobić bardziej skomplikowanego przeciwnika na zasadzie:

GML
if akcja=1{kod na chodzenie}

if akcja=2{kod na atakowanie}

 

if akcja=3 {if tryb=1 && (place_meeting(x,y+(vsp),blok_parent)) && alarm[1]=-1

{alarm[1]=10

movespeed=0

sprite_index=spr_jumper01_stoi}

 

if tryb=2 && alarm[2]=-1

{vsp=-5

movespeed=2

dir=-1

alarm[2]=1

sprite_index=spr_jumper01_atk}

 

 

 

if tryb=3 && alarm[2]=-1

{vsp=-5

movespeed=2

dir=1

alarm[2]=1

sprite_index=spr_jumper01_atk}

 

}

 

hsp = dir * movespeed;

vsp += grav;

 

image_xscale=dir;

 

kolizje jw.

To skakanie już nie działa, zatrzymuje się na akcji nr 3 i trybie 1szym, tak jakby nie czytał kolizji bo ani alarm ani animacja się nie uruchamiają. A dodałem tylko nowy warunek akcja. Halp plis:o

Odnośnik do komentarza
Udostępnij na innych stronach

Nie widzę tutaj powodu, czemu nie działa. Jak dasz akcja=3 od razu przed warunkiem if akcja=3 to zacznie działać skakanie i poruszanie?

 

 

Jedna rzecz mi się tylko rzuciła w oczy, że jak przeciwnik uderzy głową w sufit to zacznie skakać :P

Odnośnik do komentarza
Udostępnij na innych stronach

No właśnie, mam wrażenie że miejsce gdzie wstawimy kod na kolizje może mieć jakieś znaczenie w tym wypadku.

W zasadzie największym problemem jest chyba to że owa postać nie zmienia kierunku przy kolizji ze ścianą co do tej pory robiła bez problemów.

4UZ7A9V.gif (brakuje animacji chodzenia)

Dodatkowo bez zmian, w końcu zatrzymuje się na akcji 3 trybie 1.

To cały kod na postać z chodzeniem:

GML
///Poruszanie

//0; stoi 1; idzie; 2 atakuje; 3 skacze;

if akcja=0 && alarm[1]=-1 //stoi

{

if (place_meeting(x,y+vsp,blok_parent)) {sprite_index=spr_boss1_stoi}

alarm[1]=10}

 

 

if akcja=1 && alarm[1]=-1 //idzie

{hsp = dir * movespeed;

alarm[1]=20//+random(10)

sprite_index=spr_boss1_stoi;

}

 

if akcja=3 //skacze

{if tryb=1 && (place_meeting(x,y+(vsp),blok_parent)) && alarm[2]=-1

{//sprite_index=spr_boss1_jump;

//vsp=-5;

alarm[2]=5

movespeed=0

sprite_index=spr_boss1_jump_prepare}

 

//akcja=0;

 

if tryb=2 && alarm[3]=-1

{vsp=-5

movespeed=2

dir=-1

alarm[3]=10

sprite_index=spr_boss1_jump}

 

 

 

if tryb=3 && alarm[3]=-1

{vsp=-5

movespeed=2

dir=1

alarm[3]=10

sprite_index=spr_boss1_jump}

}

 

 

 

 

 

 

 

 

 

vsp += grav;

image_xscale=dir;

 

//Horizontal Collision

if (place_meeting(x+hsp,y,blok_parent))

{

while(!place_meeting(x+sign(hsp),y,blok_parent))

{

x += sign(hsp);

}

hsp = 0;

 

dir *= -1;

}

x += hsp;

 

//Vertical Collision

if (place_meeting(x,y+vsp,blok_parent))

{

while(!place_meeting(x,y+sign(vsp),blok_parent))

{

y += sign(vsp);

}

vsp = 0;

}

y += vsp;

 

Alarm[1]

GML
akcja=choose(1,3);

 

Alarm[2]

GML
if o_gracz.x<x tryb=2

if o_gracz.x>x tryb=3

 

Alarm[3]

GML
tryb=1

 

Ps: tak boss ma maskę i z lewej strony pojawia się niewidzialna ściana.

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