Skocz do zawartości

Problem z wrogiem


Milord

Rekomendowane odpowiedzi

Mam taki dość dziwny problem...

 

O ile wszystko dobrze działa..jak podejdę do wroga z lewej,lub z prawej strony,to już jest źle(góra,dół) jak wchodzę po drabinie i jestem w zasięgu wtedy wroga lub nad wrogiem jest np platforma i Ja na niej stoję,to wróg dostaje coś jak paraliżu..i kręci się w miejscu...to tak jakby reagował na mój dystans w pozycji y...

Ktoś pomoże mi jak rozwiązać ten problem?? on tylko występuje w tych dwóch przypadkach,czyli gdy mam pod sobą w pobliżu wroga lub nad sobą wroga..lub jak na niego skaczę żeby go zabić.

 

 

tutaj Step wroga

 

 

GML
//Prosta sztuczna inteligencja wroga

image_angle = direction;

if distance_to_object(obj_bohater)<90

{

if obj_bohater.x>x image_xscale=1;

else image_xscale=-1;

if (place_free(x+image_xscale*5,y) && instance_position(x+image_xscale*5,y+32,par_sciana)) x+=image_xscale*5;

}

 

if place_meeting(x,y,par_solid) || place_meeting(x,y,par_solid_entity) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x,y,par_solid) || place_meeting(x,y,par_solid_entity) && image_xscale = 1

{

image_xscale = 1;

}

 

// Odwracanie wroga od obj_niewidzialna_przeszkoda

if place_meeting(x+5,y,obj_niewidzialna_przeszkoda) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x-5,y,obj_niewidzialna_przeszkoda) && image_xscale = -1

{

image_xscale = 1;

}

 

//Zachowanie bohatera na platformy z nalozona par_przeswitujaca_platforma

if place_meeting(x+5,y,par_przeswitujaca_platforma) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x-5,y,par_przeswitujaca_platforma) && image_xscale = -1

{

image_xscale = 1;

}

 

if !place_meeting(x+sign(image_xscale),y-2,par_solid) {

if image_xscale > 0 {

hspd = min(hspd+sign(image_xscale),2);

} else if image_xscale < 0 {

hspd = max(hspd+sign(image_xscale),-2);

}

}

if hspd == 0 {

image_xscale *= -1;

unstick(8);

}

 

//Przeciwnik mruga

if hurtClock > 0 {

visible = !visible;

hurtClock -= 1;

} else {

visible = true;

}

 

 

if hp <= 0 {

 

instance_destroy();

 

dead = true; //wywolanie alarmu,gdy wrog jest martwy

global.pScore += 100;

instance_create(x,y-50,choose(obj_moneta,obj_gwiazdka,obj_serce)) // Losowy element,kiedy wrog zginie np gwiazdka,moneta,serce itp

with instance_create(x,y,obj_ginaca_jednostka) {

sprite_index = spr_wrog_umiera; //zmiana sprita

image_xscale = other.image_xscale;

image_yscale = other.image_yscale;

hspd = other.hspd;

vspd = other.vspd;

audio_play_sound(dzwiek_wrog_umiera, 1, false); //odtwarzamy dzwiek przy smierci wroga

}

}

 

 

//respawn wroga

if (dead == true)

{

 

instance_create(x,y,obj_spawn);

}

Odnośnik do komentarza
Udostępnij na innych stronach

GML
image_angle = direction;

if distance_to_object(obj_bohater)<90

{

if obj_bohater.x>x image_xscale=1;

else image_xscale=-1;

if (place_free(x+image_xscale*5,y) && instance_position(x+image_xscale*5,y+32,par_sciana)) x+=image_xscale*5;

}

 

if place_meeting(x,y,par_solid) || place_meeting(x,y,par_solid_entity) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x,y,par_solid) || place_meeting(x,y,par_solid_entity) && image_xscale = 1

{

image_xscale = 1;

}

 

// Odwracanie wroga od obj_niewidzialna_przeszkoda

if place_meeting(x+5,y,obj_niewidzialna_przeszkoda) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x-5,y,obj_niewidzialna_przeszkoda) && image_xscale = -1

{

image_xscale = 1;

}

 

//Zachowanie bohatera na pif place_meeting(x+5,y,par_przeswitujaca_platforma) && image_xscale = 1

{

image_xscale = -1;

}latformy z nalozona par_przeswitujaca_platforma

 

if place_meeting(x-5,y,par_przeswitujaca_platforma) && image_xscale = -1

{

image_xscale = 1;

}

Każdy z tech warunków może być spełniony w danym stepie, dlatego image_xscale zmienia się co chwila.

wykonuje się to

GML
if obj_bohater.x>x image_xscale=1;

nastepnie to

GML
if place_meeting(x+5,y,par_przeswitujaca_platforma) && image_xscale = 1

{

image_xscale = -1;

bo oba mogą być spełnione, i zaczyna Ci skakać.

Zdecyduj co pierwsze ma być sprawdzane, zrób z tego logiczną całość, dodaj else jakieś i powinno być dobrze

Odnośnik do komentarza
Udostępnij na innych stronach

Każdy z tech warunków może być spełniony w danym stepie, dlatego image_xscale zmienia się co chwila.

wykonuje się to

GMLif obj_bohater.x>x image_xscale=1;

nastepnie to

GMLif place_meeting(x+5,y,par_przeswitujaca_platforma) && image_xscale = 1

{

image_xscale = -1;

bo oba mogą być spełnione, i zaczyna Ci skakać.

Zdecyduj co pierwsze ma być sprawdzane, zrób z tego logiczną całość, dodaj else jakieś i powinno być dobrze

 

 

 

No na pewno ma być ten pierwszy warunek

 

GML
if obj_bohater.x>x image_xscale=1;
Odnośnik do komentarza
Udostępnij na innych stronach

Lenin ja już dawno tak zrobiłem za nim mi odpisałeś

Ale else nic nie pomaga:/

 

step wroga

 

 

 

GML
//Prosta sztuczna inteligencja wroga

image_angle = direction;

if distance_to_object(obj_bohater)<90

{

if obj_bohater.x>x image_xscale=1;

else image_xscale=-1;

if (place_free(x+image_xscale*5,y) && instance_position(x+image_xscale*5,y+32,par_sciana)) x+=image_xscale*5;

}

else

if place_meeting(x,y,par_solid) || place_meeting(x,y,par_solid_entity) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x,y,par_solid) || place_meeting(x,y,par_solid_entity) && image_xscale = 1

{

image_xscale = 1;

}

 

// Odwracanie wroga od obj_niewidzialna_przeszkoda

else

if place_meeting(x+5,y,obj_niewidzialna_przeszkoda) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x-5,y,obj_niewidzialna_przeszkoda) && image_xscale = -1

{

image_xscale = 1;

}

else

//Zachowanie bohatera na platformy z nalozona par_przeswitujaca_platforma

if place_meeting(x+5,y,par_przeswitujaca_platforma) && image_xscale = 1

{

image_xscale = -1;

}

if place_meeting(x-5,y,par_przeswitujaca_platforma) && image_xscale = -1

{

image_xscale = 1;

}

else

if !place_meeting(x+sign(image_xscale),y-2,par_solid) {

if image_xscale > 0 {

hspd = min(hspd+sign(image_xscale),2);

} else if image_xscale < 0 {

hspd = max(hspd+sign(image_xscale),-2);

}

}

if hspd == 0 {

image_xscale *= -1;

unstick(8);

}

 

//Przeciwnik mruga

if hurtClock > 0 {

visible = !visible;

hurtClock -= 1;

} else {

visible = true;

}

 

 

if hp <= 0 {

 

instance_destroy();

 

dead = true; //wywolanie alarmu,gdy wrog jest martwy

global.pScore += 100;

instance_create(x,y-50,choose(obj_moneta,obj_gwiazdka,obj_serce)) // Losowy element,kiedy wrog zginie np gwiazdka,moneta,serce itp

with instance_create(x,y,obj_ginaca_jednostka) {

sprite_index = spr_wrog_umiera; //zmiana sprita

image_xscale = other.image_xscale;

image_yscale = other.image_yscale;

hspd = other.hspd;

vspd = other.vspd;

audio_play_sound(dzwiek_wrog_umiera, 1, false); //odtwarzamy dzwiek przy smierci wroga

}

}

 

 

//respawn wroga

if (dead == true)

{

 

instance_create(x,y,obj_spawn);

}

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