pankracy Opublikowano 22 Grudnia 2015 Udostępnij Opublikowano 22 Grudnia 2015 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 Więcej opcji udostępniania...
I am vader Opublikowano 22 Grudnia 2015 Udostępnij Opublikowano 22 Grudnia 2015 Sprawdzaj kąt między graczem a przeciwnikiem. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Filar Społeczności ANtY Opublikowano 22 Grudnia 2015 Filar Społeczności Udostępnij Opublikowano 22 Grudnia 2015 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 Więcej opcji udostępniania...
pankracy Opublikowano 22 Grudnia 2015 Autor Udostępnij Opublikowano 22 Grudnia 2015 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 Więcej opcji udostępniania...
pankracy Opublikowano 18 Stycznia 2016 Autor Udostępnij Opublikowano 18 Stycznia 2016 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 Więcej opcji udostępniania...
Rekomendowane odpowiedzi
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ę