Skocz do zawartości

dziwny problem ze strzelającym przeciwnikiem.


pankracy

Rekomendowane odpowiedzi

Cześć wszystkim,

 

Czy mógłby mi ktoś pomóc rozwiązać ten problem?

 

mam strzelającego wroga...ok wszystko ładnie...ale sprawa wygląda tego typu,że mimo,że użyłem funkcji distance_to_object , to wróg strzela..(w pozycji x i y)a powinien strzelać,tylko wtedy,kiedy się zbliżę na daną odległość...

Czyli jak np wróg znajduje się na górnej platformie,a ja wchodzę po drabinie na nią,to w połowie wejścia po drabinie on się już zatrzymuje i strzela..mimo,że jeszcze nie wszedłem na drabinę..

Podobnie jak jest odwrotnie,czyli jak jestem na górnej platformie,a wróg jest na dolnej ,to jak schodzę z niej mimo,że jeszcze nie jestem na dolnej,to on mnie już wykrywa i strzela

Chciałbym,żeby wróg wykrywał tą kolizję dopiero jak jestem na jego dystansie,ale w pozycji x,bo w y,to głupio wygląda...

 

O to mój kod wroga

 

 

create

 

 

GML
///Ustawienia

event_inherited();

pocisk = 1;

hp = 10;

skok=0;

image_xscale *= choose(1,-1);

 

//pozycje powrotu wroga po restarcie mapy

start_x = x;

start_y = y;

 

 

step wroga

 

GML
var stopped;

stopped=0;

 

 

image_angle = direction;

if distance_to_object(obj_player) <120

 

{

stopped=1

if (obj_player.x>x) && (obj_player.y>y) image_xscale=1;

 

else if (obj_player.x<x) && (obj_player.y<y) image_xscale=-1;

 

if( pocisk)

{

var i;

i = instance_create( x+25, y-15, obj_bomba );

i.speed = 10;

i.hspeed=image_xscale*10;

pocisk = 0;

alarm[0]=room_speed*1.5

}

}

else

{

if alarm[1] = -1 alarm[1] = room_speed+random(room_speed*2);

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

}

 

///par_podloze ruch wroga

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

if image_xscale > 0 {

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

} else if image_xscale < 0 {

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

}

}

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

{

image_xscale = -1;

}

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

{

image_xscale = 1;

}

if hp <= 0 {

instance_destroy();

instance_create(x,y,obj_czolgista_ginie){

sprite_index = czolgista_ginie; //sprite do poruszania sie wroga

image_xscale = other.image_xscale;

image_yscale = other.image_yscale;

hspd = other.hspd;

vspd = other.vspd;

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

}

}

if (stopped)

hspd=0;

 

alarm 0

 

GML
pocisk=1;

 

 

alarm 1

 

GML
image_xscale*=-1;
Odnośnik do komentarza
Udostępnij na innych stronach

  • Filar Społeczności

o ile sie nie myle to sprawdzaj coś typu

 

GML
if( abs(obj_player.x - x) < 120 && abs(obj_player.y - y) < 10)

{

//szczelaj

}

 

czyli odleglosc tylko na x sprawdzasz ale też się sprawdzasz czy y hero i enemiego za bardzo sie nie rozni

Odnośnik do komentarza
Udostępnij na innych stronach

o ile sie nie myle to sprawdzaj coś typu

 

GML
if( abs(obj_player.x - x) < 120 && abs(obj_player.y - y) < 10)

{

//szczelaj

}

 

czyli odleglosc tylko na x sprawdzasz ale też się sprawdzasz czy y hero i enemiego za bardzo sie nie rozni

 

 

Dzięki chłopaki no właśnie tak.myślałem,że o.kąty chodzi.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...
Dzięki chłopaki no właśnie tak.myślałem,że o.kąty chodzi.

 

Cześć chłopaki Powiedzcie mi,gdzie popełniłem błąd??lub poprawcie mnie

,bo ciężko mi te kąty ustawić..

głównie chodzi mi o to,że:

 

1.Wróg dopiero ma mnie zobaczyć zatrzymać się i strzelać jak znajdę się w jego zasięgu,a dokładnie na jego płaszczyźnie platformie po której chodzi wróg,a nie płaszczyźnie platformie wyżej i niżej..

obecnie jest tak,że no strzela nawet jak jestem wyżej na platformie,a on jest niżej,ale wykrywa sam dystans i zatrzymuje się i strzela..co jest głupie..

2.Kolejna sprawa jak zrobić łatwiejszy zapis niż ja mam obracania się wroga względem mojego bohatera? image_xscale 1 i -1

 

GML
if (obj_player.x>x) && (obj_player.y>y) image_xscale=1;

else if (obj_player.x<x) && (obj_player.y<y) image_xscale=-1;

 

3.Ustawiłem sobie idealnie pocisk wroga,który wychodzi z jego lufy,no i jest dobrze jeśli sprite wroga strzela do mnie w prawo,natomiast jak znajdę się po lewej Jego stronie i zacznie do mnie strzelać w lewo,to ten pocisk już nie wylatuje z lufy,tylko zza lufy...jak to ustawić? czy to coś z direction??

4.Zmiana sprita kiedy mnie zobaczy i będzie strzelał,a potem powrót do poprzedniego sprita wroga jaki miał wcześniej...co prawda ustawiłem speed=0; ale to nie ten efekt..jak dam tam zmianę sprite

image_index=sprite ataku; no to zmieni sprita,ale potem już nie powróci do wcześniejszego sprita jak oddale się na odległość,która jest niewidoczna już dla wroga

 

tutaj step mojego wroga...

 

GML
var stopped;

stopped=0;

 

 

//image_angle = direction;

if distance_to_object(obj_player) <=80

{

speed=0; //tu sie zatrzymuje jak nas zobaczy

 

if (obj_player.x>x) && (obj_player.y>y) image_xscale=1;

else if (obj_player.x<x) && (obj_player.y<y) image_xscale=-1;

 

//if( abs(obj_player.y - y) < 80 && abs(obj_player.y - y) < 80) //tu nie moge ustawic tych katow widzenia wroga

if ( strzal )

{

var i;

i = instance_create( x+25, y-15, obj_pocisk)

i.speed = 7;

i.hspeed=image_xscale*7;

strzal = 0;

alarm[0]=room_speed*1.5

}

}

else

{

if alarm[1] = -1 alarm[1] = room_speed+random(room_speed*2);

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

speed=4;

}

 

 

 

if place_free(x,y+1)

{gravity = 0.5}

else

{gravity = 0}

 

if t=1

{

t=2

speed=4

}

 

if t=2

{

if hspeed<0

{

image_xscale = -1;

if !place_meeting(x-30,y+10,par_podloze )

speed*=-1

else if place_meeting(x-1,y,par_podloze )

speed*=-1

st=1

}

 

else if hspeed>0

{

image_xscale = 1;

if !place_meeting(x+30,y+10,par_podloze )

speed*=-1

else if place_meeting(x+1,y,par_podloze )

speed*=-1

st=2

}

}

 

 

//Obrazenia wroga

if zegarobrazen > 0 {

visible = !visible;

zegarobrazen -= 1;

} else {

visible = true;

}

 

//wrog ginie

if hp <= 0 {

instance_destroy();

if (stopped)

hspd=0;

}

 

create wroga

 

GML
///Ustawienia

event_inherited();

strzal = 1;

hp = 10;

zegarobrazen = 0;

t=1;

st=1;

 

//pozycje powrotu wroga po restarcie mapy

start_x = x;

start_y = y;

 

 

Alarm 0 wroga

 

GML
strzal=1;

 

Alarm 1 wroga

 

GML
image_xscale*=-1;
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ę...