Cygnus Opublikowano 24 Lipca 2015 Udostępnij Opublikowano 24 Lipca 2015 Cześć wszystkim mam taki problem... Otóż robię proste AI no i kiedy jestem blisko wroga,to wszystko ładnie działa..zaczyna mnie gonić na odpowiednią odległość,potem jak się oddalam,to się uspakaja i spokojnie sobie chodzi,ale nie chce się obrócić i goni mnie tyłem,chyba,że nie jestem plecami do niego,wtedy goni mnie normalnie. Próbowałem już różnych sposobów i się zatrzymałem jak go obrócić co jest nie tak? o to kod obj_wroga STEP GML ///Ruch wroga if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if distance_to_object(obj_player) < 90 { point_direction(x,y,obj_player.x,obj_player.y) direction=point_direction(x,y,obj_player.x,obj_player.y) speed=7 } else { speed=0 } Game Maker studio Pro Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 24 Lipca 2015 Udostępnij Opublikowano 24 Lipca 2015 No bo Ty ustawiasz image_xscale w zależności od wolnej przestrzeni. Sprawdzaj po której stronie jest gracz, a względem tego dostosuj image_xscale. Kierunek do gracza możesz najprościej sprawdzić poprzez porównywanie x. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 24 Lipca 2015 Autor Udostępnij Opublikowano 24 Lipca 2015 Już ogarnąłem zrobiłem tak i działa;) w STEP wroga GML ///AI wroga if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if(!collision_line(x, y, obj_player.x, obj_player.y,true, true) && distance_to_object(obj_player) < 90) { if (obj_player.x<x) image_xscale = -1 else image_yscale = 1 // Obraca sie w lewo lub prawo w zaleznosci od X bohatera. move_towards_point(obj_player.x,y,1); speed=5 } else { speed=0 } ładnie się obraca teraz jak mnie wróg zlokalizuje i goni na odpowiedni dystans...tylko teraz ciekawi mnie jedna rzecz,jak jestem blisko krawędzi platformy,to on może np nie zdążyć wyhamować i spadnie wróg,,co zrobić? bo jak w połowie trasy mnie goni to jest wszystko dobrze zdąży zahamować jak mu z pola widzenia zniknę,ale jak jestem już na krawędzi i on przybiegnie a ja gdzieś na następną przeskoczę,to wróg już może nie wrobić i spaść na dół. hmmm..albo może zrobić tak,że on jak mnie zobaczy,to goni,ale jak widzi,że jest krawędź platformy to staje w miejscu na moment i potem się obraca w drugim kierunku...to by rozwiązało problem tego,że wyrobiłby się na końcu platformy i zatrzymał po czym obrócił się i spokojnie już szedł w drugą stronę. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 24 Lipca 2015 Autor Udostępnij Opublikowano 24 Lipca 2015 A jednak jest jeszcze mały bug,który zlokalizowałem... z prawej strony jak idę bohaterem a wróg jest plecami do mnie odwrócony ,to jak mnie namierzy,to bezproblemowo obraca się w prawą stronę do mnie i mnie goni..Natomiast jak przeskoczę na drugą stronę na lewą i wróg będzie plecami do mnie po lewej stronie,to się nie obraca i plecami tyłem do mnie biegnie jak mnie zobaczy:/ Kurcze co jeszcze jest tu nie tak step mojego wroga GML //AI wroga if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if(!collision_line(x, y, obj_player.x, obj_player.y,true, true) && distance_to_object(obj_player) < 90) { if (obj_player.x<x) image_xscale = -1 else image_yscale = 1 // Obraca sie w lewo lub prawo w zaleznosci od X bohatera. move_towards_point(obj_player.x,y,1); speed=5 } else { speed=0 } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Matrix_ Opublikowano 24 Lipca 2015 Udostępnij Opublikowano 24 Lipca 2015 Zdecyduj się która czynność ma kontrolować kierunek obrotu. Albo: GML if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } Albo GML if (obj_player.x<x) image_xscale = -1 else image_yscale = 1 // Obraca sie w lewo lub prawo w zależności od X bohatera. A jeżeli potrzebujesz oba, musisz zrobić jakiś controller, kiedy który ma obowiązywać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 24 Lipca 2015 Autor Udostępnij Opublikowano 24 Lipca 2015 Zdecyduj się która czynność ma kontrolować kierunek obrotu. Albo: GML if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } Albo GML if (obj_player.x<x) image_xscale = -1 else image_yscale = 1 // Obraca sie w lewo lub prawo w zależności od X bohatera.</span></span> A jeżeli potrzebujesz oba, musisz zrobić jakiś controller, kiedy który ma obowiązywać. Jasiu potrzebuje te dwa.Ok obj controler tylko co w nim.ma byc dokladnie?? Pomóż;-) Jasiu potrzebuje te dwa.Ok obj controler tylko co w nim.ma byc dokladnie?? Pomóż;-) Chodzi o to,zeby to normalnie dzialalo,bo z jednej strony jak jest plecami do mnie,to odwraca sie wrog do mnie i mnie goni,czyli jest ok,ale z drugiej strony,gdy jest plecami do mnie to nieodwraca sie,tylko tylem mnie goni,i to chce naprawic..Sposob obojetny. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Threef Opublikowano 25 Lipca 2015 Udostępnij Opublikowano 25 Lipca 2015 Poczytaj o maszynach stanów. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 25 Lipca 2015 Udostępnij Opublikowano 25 Lipca 2015 Mnie jeszcze zastanawia to: GML move_towards_point(obj_player.x,y,1); speed=5 } else { speed=0 } Move_towards point a speed to zupełnie dwie inne rzeczy. Czemu najpierw używasz funkcji, w której wyznaczasz kierunek za pomocą określonego x i y, a potem zmienną, która idzie w kierunku w którym jest direction? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 25 Lipca 2015 Autor Udostępnij Opublikowano 25 Lipca 2015 Mnie jeszcze zastanawia to: GML move_towards_point(obj_player.x,y,1); speed=5 } else { speed=0 } Move_towards point a speed to zupełnie dwie inne rzeczy. Czemu najpierw używasz funkcji, w której wyznaczasz kierunek za pomocą określonego x i y, a potem zmienną, która idzie w kierunku w którym jest direction? Czyli rozumiem ze ta funkcja wszystko psuje? Wobec tego jaka inna funkcja zastapic move_towards_point??? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 25 Lipca 2015 Udostępnij Opublikowano 25 Lipca 2015 To akurat nie ma nic wspólnego z animacją, a z samym chodzeniem. Albo wywal speed albo move_toward_point. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 25 Lipca 2015 Autor Udostępnij Opublikowano 25 Lipca 2015 Dobra tak.zrobie,tylko,ze.chce.zeby.wrog.jak.mnie.zobaczył to.zaczal.mnie gonic,ale.na.pewnej.odleglosci przestal.stad ten speed=0 Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 25 Lipca 2015 Udostępnij Opublikowano 25 Lipca 2015 GML else { move_towards_point(obj_player.x,y,0); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
M@ti002 Opublikowano 25 Lipca 2015 Udostępnij Opublikowano 25 Lipca 2015 Trudno zeby dzialalo skoro w jednym stepie najpierw zmieniasz xscale na -1 a zaraz potem na 1, jak po obu stronach ma miejsce. Wsadz to w warunki i po klopocie. Cos w stylu GML //step wroga if (distance_to_object(obj_player) < 90) { if (place_free(x+32,y+3) && obj_player.x>x) { image_xscale = -1; move_towards_point(obj_player.x,obj_player.y,5); } else if (place_free(x-32,y+3) && obj_player.x<x) { image_xscale = 1; move_towards_point(obj_player.x,obj_player.y,5); } } //else jakies tam ai spacerowania sobie, ew wracania do punktu poczatkowego</span> Tyle, a nie jakies bawienie sie w move_towards_point ze speedem 0 :rolleyes: To jest platformowka, widok od gory, czy cos pomiedzy? Ogolnie to gdzie sie wszyscy podziali? Forum sprawia wrazenie martwego :unsure: Czyzby hype na GMa gdzies zniknal na rzecz popularniejszych jezykow/gotowych silnikow? EDIT: Ah, pomylilem sie na samym poczatku, tam ma byc distance_to_object(obj_player) < 90, poprawione :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 25 Lipca 2015 Autor Udostępnij Opublikowano 25 Lipca 2015 Trudno zeby dzialalo skoro w jednym stepie najpierw zmieniasz xscale na -1 a zaraz potem na 1, jak po obu stronach ma miejsce. Wsadz to w warunki i po klopocie. Cos w stylu GML //step wroga if (distance_to_object(obj_player) > 90) { if (place_free(x+32,y+3) && obj_player.x>x) { image_xscale = -1; move_towards_point(obj_player.x,obj_player.y,5); } else if (place_free(x-32,y+3) && obj_player.x<x) { image_xscale = 1; move_towards_point(obj_player.x,obj_player.y,5); } } //else jakies tam ai spacerowania sobie, ew wracania do punktu poczatkowego</span></span></span> Tyle, a nie jakies bawienie sie w move_towards_point ze speedem 0 :rolleyes: To jest platformowka, widok od gory, czy cos pomiedzy? Ogolnie to gdzie sie wszyscy podziali? Forum sprawia wrazenie martwego :unsure: Czyzby hype na GMa gdzies zniknal na rzecz popularniejszych jezykow/gotowych silnikow? Dzieki M@ti sprawdze to,tak to jest platformowka;-) Niestety w tym zmodyfikowanym kodzie od Ciebie on się wcale nie odwraca idzie wróg przed siebie i spada ot jest gdzieś błąd.. Tak jeszcze zrobiłem... ale dalej ten problem,że jak z prawo ide do wroga,a on jest do mnie plecami odwrócony,to jak mnie zlokalizuje,to się odwróci i goni,to jest ok,ale jak idę w lewo i wróg jest plecami do mnie,to się nie chce subaniec odwrócić,tylko plecami mnie goni:/ STEP wroga GML ///AI wroga if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if(!collision_line(x, y, obj_player.x, obj_player.y,true, true) && distance_to_object(obj_player) < 90) { if (obj_player.x<x) image_xscale = -1 else image_yscale = 1 // Obraca sie w lewo lub prawo w zaleznosci od X bohatera. point_direction(x,y,obj_player.x,obj_player.y) direction=point_direction(x,y,obj_player.x,obj_player.y) speed=5 } else { speed=0 } Dobra udało mi się rozwiązać problem obracania się wroga w momencie zlokalizowania mnie przez niego tu kod step wroga GML ///AI wroga if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if(!collision_line(x, y, obj_player.x, obj_player.y,true, true) && distance_to_object(obj_player) < 90) { if (obj_player.x<x) image_xscale = -1 else if (obj_player.x>x)image_xscale = 1 // Obraca sie w lewo lub prawo w zależności od X bohatera. point_direction(x,y,obj_player.x,obj_player.y) direction=point_direction(x,y,obj_player.x,obj_player.y) speed=5 } else { speed=0 } Tylko parę mankamentów 1.co zrobić,że jak goni mnie wróg i ja skacze,żeby on też nie skakał..bo głupio to wygląda... 2.czasem jak się za mocno rozpędzi to może nie zdążyć wyhamować na krawędzi platformy jak mnie goni...Co z tym zrobić? 3.co zrobić ,że jak mnie zobaczy,no to nie goni mnie,a np zatrzymuje się i strzela ,i jak zniknę mu z pola widzenia,to wraca tam,gdzie mnie wcześniej widział Połączyłem Twoje posty. Używaj proszę opcji "Edytuj" zamiast pisać kilka pod rząd. Maximal Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
M@ti002 Opublikowano 26 Lipca 2015 Udostępnij Opublikowano 26 Lipca 2015 Skoro to platformowka, to nie widze sensu w robieniu tego na direction. Jak dla mnie lepiej to zrobic tak: Wrog sprawdza, gdzie jest bohater (a jak masz juz zrobione obracanie sprita, to mozna wykorzystac xscale do tego), czyli cos takiego dac zamiast direction i speed: GML if (place_free(x+image_xscale*5,y)) x+=image_xscale*5;Nie bedzie wtedy "skakal" bo bedzie szedl w strone bohatera tylko w osi x. Co do drugiego pytania to nie widze nigdzie w kodzie wykrywania konca platformy, ale mozna to zrobic tak: GML if (place_free(x+image_xscale*5,y) && instance_position(x+image_xscale*5,y+32,obj_Platforma)) x+=image_xscale*5; W miejsce 32 wklep ilosc pikseli, jakie dziela punkt centralny sprita bohatera do ziemi. Kod dziala tak: Sprawdza, czy po swojej prawej/ew lewej, zaleznie od kierunku patrzenia ma czysto, potem sprawdza, czy bedzie mial pod soba platforme, jak oba warunki sa spelnione to idzie w kierunku gracza. Co do 3 pytania to juz ci nie podam kodu, bo nie wiem jak to dokladnie tam masz wszystko poukladane, ale tu mozesz wykorzystac warunek GML if !collision_line(x,y,obj_Player.x,obj_Player.y) {//akcja strzalu;} else {xspotted=obj_Player.xprevious; yspotted=obj_Player.yprevious; //akcja dotarcia do do punktu (xspotted, yspotted)}</span> A direction bedzie mozna uzyc do oddawania strzalow w gracza. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 26 Lipca 2015 Autor Udostępnij Opublikowano 26 Lipca 2015 w step dałem tak: GML ///AI wroga if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if(!collision_line(x, y, obj_player.x, obj_player.y,true, true) && distance_to_object(obj_player) < 90) { if (obj_player.x<x) image_xscale = -1 else if (obj_player.x>x)image_xscale = 1 // Obraca sie w lewo lub prawo w zaleznosci od X bohatera. if (place_free(x+image_xscale*5,y) && instance_position(x+image_xscale*5,y+32,par_wall)) x+=image_xscale*5; } Działa idealnie M@ti;) dzięki za pomoc.. co do strzelania pokombinuje muszę stworzyć obj_strzal i nadać mu prędkość i wartość.. Ok to jeszcze M@ti jak zrobić,żeby wróg się zatrzymał jak nas zobaczy w określonej odległości,a jak odejdziemy z pola widzenia,to zacznie się zachowywać jak wcześniej.. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
M@ti002 Opublikowano 26 Lipca 2015 Udostępnij Opublikowano 26 Lipca 2015 Co ma robic jak wczesniej? Spacerowac, dazyc do punktu, w ktorym widzial bohatera, czy moze jeszcze cos innego? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 26 Lipca 2015 Autor Udostępnij Opublikowano 26 Lipca 2015 To niech wróg jak mnie zlokalizuje,niech się zatrzyma i strzela do mnie,i obojętnie z jakiej strony go podejdę,czy z lewej,czy z prawej niech strzela do mnie,a jak się oddale z Jego pola widzenia,to niech z powrotem grzecznie sobie spaceruje;) strzelający obiekt już stworzyłem czyli obj_laserek i w create dałem tak GMLimage_speed = 0.15; hspeed = (-10); hspeed = (10); Bo chce żeby wróg strzelał z lewej strony jak jest w lewo do mnie zwrócony,i z prawej strony jak jest do mnie zwrócony.. Tutaj zmodyfikowałem kod wroga drugiego ,teraz co zrobić żeby zatrzymał mnie jak mnie zobaczył i strzelał w konkretnym kierunku,czyli w moim,bo teraz to na odwal strzela,raz w lewo raz w prawo.. w stepie wroga dałem GML if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } image_angle = direction; if distance_to_object(obj_player)<90 { if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; strzal = 0; alarm[0] = room_speed * 0.2; } } w Create dałem GML strzal = 1; i Alarm 0 dałem GML strzal = 1; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
M@ti002 Opublikowano 26 Lipca 2015 Udostępnij Opublikowano 26 Lipca 2015 GML [STEP] if distance_to_object(obj_player)<90 && !collision_line(x,y,obj_player.x,obj_player.y) { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 0; if alarm[0] = -1 alarm[0] = room_speed * 0.2; } } 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_wall)) x+=image_xscale*5; } [ALARM 1] image_xscale*=-1; I wywal hspeed z create pocisku, i powinno byc wszystko ok. :) O takie cos chodzilo? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 27 Lipca 2015 Autor Udostępnij Opublikowano 27 Lipca 2015 GML[sTEP] if distance_to_object(obj_player)<90 && !collision_line(x,y,obj_player.x,obj_player.y) { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 0; if alarm[0] = -1 alarm[0] = room_speed * 0.2; } } 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_wall)) x+=image_xscale*5; } [ALARM 1] image_xscale*=-1; I wywal hspeed z create pocisku, i powinno byc wszystko ok. :) O takie cos chodzilo? Działać no działa,ale skubaniec tylko raz do mnie strzela jak mnie zobaczy,a potem jak drugi raz do niego podejdę i mnie zobaczy,to już nie strzela;) o taki on jest.No i tylko zwalnia jak mnie zobaczy i raz strzela i to jeszcze z jednej strony,a w druga jak się obrócę on się obróci,tylko idzie do mnie,a nie strzela..powinien się jeszcze zatrzymywać jak mnie zobaczy...zatrzymuje się i strzela,jak zniknę mu z pola widzenia zacznie spacerować,jak znowu mnie zobaczy zatrzymuje się i strzela o takie coś mi chodzi;) o to step wroga obj_wrog1 GML if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if distance_to_object(obj_player)<90 && !collision_line(x,y,obj_player.x,obj_player.y) { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 0; if alarm[0] = -1 alarm[0] = room_speed * 0.2; } } 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_wall)) x+=image_xscale*5; } Alarm 0 GML strzal = 1; Alarm 1 GML image_xscale*=-1; Create GML strzal = 1; no i tu kod obj_laserek create GML image_speed = 0.15; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 28 Lipca 2015 Autor Udostępnij Opublikowano 28 Lipca 2015 Działać no działa,ale skubaniec tylko raz do mnie strzela jak mnie zobaczy,a potem jak drugi raz do niego podejdę i mnie zobaczy,to już nie strzela;) o taki on jest.No i tylko zwalnia jak mnie zobaczy i raz strzela i to jeszcze z jednej strony,a w druga jak się obrócę on się obróci,tylko idzie do mnie,a nie strzela..powinien się jeszcze zatrzymywać jak mnie zobaczy...zatrzymuje się i strzela,jak zniknę mu z pola widzenia zacznie spacerować,jak znowu mnie zobaczy zatrzymuje się i strzela o takie coś mi chodzi;) o to step wroga obj_wrog1 GMLif place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if distance_to_object(obj_player)<90 && !collision_line(x,y,obj_player.x,obj_player.y) { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 0; if alarm[0] = -1 alarm[0] = room_speed * 0.2; } } 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_wall)) x+=image_xscale*5; } Alarm 0 GMLstrzal = 1; Alarm 1 GMLimage_xscale*=-1; Create GMLstrzal = 1; no i tu kod obj_laserek create GMLimage_speed = 0.15; Dobra udało mi się chociaż to zrobić,że wróg już strzela za każdym razem jak mnie zobaczy,czy to z lewej,czy z prawej strony,tyle,że strzela serią długą laseru,a powinien strzelać pojedynczo laserem,a nie serią,no i,żeby stał w miejscu i strzelał jak mnie zobaczy,a nie zwalniał i strzelał jak mnie widzi. tu poprawiłem kod w stepie wroga1 GML if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if distance_to_object(obj_player)<90 && !collision_line(x,y,obj_player.x,obj_player.y) { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 1;//tu wystarczyko zmienic z 0 na 1 i teraz strzela za kazdym razem jak sie zblize do niego i to z prawej,czy z lewej strony if alarm[0] = -1 alarm[0] = room_speed * 0.2; } } 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_wall)) x+=image_xscale*5; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 14 Sierpnia 2015 Autor Udostępnij Opublikowano 14 Sierpnia 2015 Dobra udało mi się chociaż to zrobić,że wróg już strzela za każdym razem jak mnie zobaczy,czy to z lewej,czy z prawej strony,tyle,że strzela serią długą laseru,a powinien strzelać pojedynczo laserem,a nie serią,no i,żeby stał w miejscu i strzelał jak mnie zobaczy,a nie zwalniał i strzelał jak mnie widzi. tu poprawiłem kod w stepie wroga1 GMLif place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } if distance_to_object(obj_player)<90 && !collision_line(x,y,obj_player.x,obj_player.y) { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 1;//tu wystarczyko zmienic z 0 na 1 i teraz strzela za kazdym razem jak sie zblize do niego i to z prawej,czy z lewej strony if alarm[0] = -1 alarm[0] = room_speed * 0.2; } } 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_wall)) x+=image_xscale*5; } Kurcze co robię nie tak,że ten wróg nie chcę normalnie strzelać,tylko strzela jak z serią z karabinu:/ Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 14 Sierpnia 2015 Udostępnij Opublikowano 14 Sierpnia 2015 Tam gdzie zmieniłeś z strzal=0 na strzal=1 to nie ma sensu. Spróbuj tam wywalić if alarm[0]=-1, ale strzal=0 zostaw. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 15 Sierpnia 2015 Autor Udostępnij Opublikowano 15 Sierpnia 2015 Zrobiłem dokładnie tak wywaliłem tą całą linijkę if alarm[0] = -1 alarm[0] = room_speed * 0.2; strzał ustawiłem z powrotem na 0 ale to nic nie daje,raz tylko wróg strzela jak mnie widzi,a potem już wcale nie strzela. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 15 Sierpnia 2015 Udostępnij Opublikowano 15 Sierpnia 2015 alarm[0]=room_speed*0.2 zostaw Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 17 Sierpnia 2015 Autor Udostępnij Opublikowano 17 Sierpnia 2015 No i działa;) jak należy dziękuje kt117;) a.powiedz mi co zrobić,żeby wróg w momencie jak zobaczy bohatera nie zwalniał,tylko się zatrzymał i strzelał do niego...bo próbowałem z speed=0 ale coś nie wychodzi... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 17 Sierpnia 2015 Udostępnij Opublikowano 17 Sierpnia 2015 Wnioskując z kodu on zwalnia bo: 1.Dochodzisz do niego, on cie zauważa i się zatrzymuje ale ty się oddalasz i goni cię, zatrzymuje itd. albo 2.Zmieniasz x wroga, bawisz się speed, hspeed itp. gdzie indziej niż w przedostatniej linijce kodu który załączyłeś. Jeżeli bohater porusza się wolniej niż wróg to możliwa jest pierwsza opcja, jeżeli masz jeszcze jakiś kod u wroga/wróg ma parenta to 2. Spróbuj podać więcej info. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 17 Sierpnia 2015 Autor Udostępnij Opublikowano 17 Sierpnia 2015 Wnioskując z kodu on zwalnia bo: 1.Dochodzisz do niego, on cie zauważa i się zatrzymuje ale ty się oddalasz i goni cię, zatrzymuje itd. albo 2.Zmieniasz x wroga, bawisz się speed, hspeed itp. gdzie indziej niż w przedostatniej linijce kodu który załączyłeś. Jeżeli bohater porusza się wolniej niż wróg to możliwa jest pierwsza opcja, jeżeli masz jeszcze jakiś kod u wroga/wróg ma parenta to 2. Spróbuj podać więcej info. kt117 Tutaj jest cały step mojego wroga,oraz parenta jakiego ma GML ///AI wroga Dino chodzi nerwowo i strzela jak nas zobaczy if place_free(x+32,y+3) && image_xscale = 1 { image_xscale = -1; } if place_free(x-32,y+3) && image_xscale = -1 { image_xscale = 1; } image_angle = direction; if distance_to_object(obj_player)<90 { if obj_player.x>x image_xscale=1; else image_xscale=-1; if( strzal ) { var i; i = instance_create( x, y, obj_laserek ); i.speed = 10; i.hspeed=image_xscale*10; //i.direction = point_direction(i.x,i.y,obj_player.x,obj_player.y); //ew i.hspeed=image_xscale*10; jak ma strzelac tylko w poziomie, niezaleznie od wysokosci bohatera strzal = 0; alarm[0]=room_speed*0.2 } } 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_wall)) x+=image_xscale*5; } //naprawiamy bugujacego sie wroga przy zawracaniu if place_meeting(x+5,y,par_wall ) && image_xscale = 1 { image_xscale = -1; } if place_meeting(x-5,y,par_wall) && image_xscale = -1 { image_xscale = 1; } ///Ruch wroga z odwracaniem go przez obiekty dziedziczace z par_solid 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); } //Obrazenia wroga if hurtClock > 0 { visible = !visible; hurtClock -= 1; } else { visible = true; } if hp <= 0 { instance_destroy(); instance_create(x,y+50,choose(obj_coin,object102)) // daje losowy item np monety albo jabłuszka with instance_create(x,y,obj_entity_die) { sprite_index = DinoGinie; //sprite do poruszania sie wroga image_xscale = other.image_xscale; image_yscale = other.image_yscale; hspd = other.hspd; vspd = other.vspd; } } tak mam parenta z wrogiem o to kod parenta;) par_entity CREATE GML ///Ustawienia g = 1; weight = 1; multiG = 1; f = 1; multiF = 1; vF = false; hp = 999999999; maxHp = 999999999; vspd = 0; vspdB = 0; hspd = 0; hspdB = 0; inAir = false; inWater = false; END step GML ///Fizyka if bbox_left+sign(hspd) < 0 || bbox_right+sign(hspd) >= room_width { hspd = 0; x = clamp(x,x-bbox_left,room_width-1-(bbox_right-x)); } if unstick(4) > 8 { instance_destroy(); } hspd += hspdB; for(i=0;i<abs(hspd);i++) { if solid_place(x+sign(hspd),y) { if solid_place(x+sign(hspd),y-1) || inAir == true { if solid_place(x+sign(hspd),y-2) || inAir == true { hspd = 0; } else { x += sign(hspd); y -= 2; hspd -= sign(hspd)/2; } } else { x += sign(hspd); y -= 1; hspd -= sign(hspd)/3; } } else { x += sign(hspd); if inAir == false && !solid_place(x,y+1) && solid_place(x,y+2) { y += 1; } else if inAir == false && !solid_place(x,y+2) && solid_place(x,y+3) { if !solid_place(x,y+1) { y += 1; } if !solid_place(x,y+1) { y += 1; } } } } hspd -= hspdB; hspdB = 0; if inWater == false { //Tarcie if hspd > 0 { hspd = max(0,hspd-f*multiF); } else if hspd < 0 { hspd = min(0,hspd+f*multiF); } //Wertykalne tarcie if vF == true { if vspd > 0 { vspd = max(0,vspd-f*multiF); } else if vspd < 0 { vspd = min(0,vspd+f*multiF); } } //Grawitacja vspd += g*multiG; } else { //Podwodne tarcie hspd = lerp(hspd,0,.1); if abs(hspd) < .2 { hspd = 0; } vspd = lerp(vspd,0,.1); if abs(vspd) < .2 { vspd = 0; } } multiF = 1; multiG = 1; inAir = true; vspd += vspdB; for(i=0;i<abs(vspd);i+=1) { if solid_place(x,y+sign(vspd)) { if vspd > 0 { var slope = getSlopeInclination(); if slope <= -2 && slope >= -8 { x -= 1; hspd -= 1; i -= 1; } else if slope >= 2 && slope <= 8 { x += 1; hspd += 1; i -= 1; } else { vspd = 0; inAir = false; } } else { vspd = 0; } } else { y += sign(vspd); } } vspd -= vspdB; vspdB = 0; if inWater != place_meeting(x,y-sprite_height/3,obj_water) { inWater = !inWater; if inWater == true { vspd /= 2; hspd /= 2; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 17 Sierpnia 2015 Udostępnij Opublikowano 17 Sierpnia 2015 Dobra, to daj tam gdzie wykrywasz że już ma stać i strzelać GML hspd=0; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Cygnus Opublikowano 18 Sierpnia 2015 Autor Udostępnij Opublikowano 18 Sierpnia 2015 hspd=0; dałem już po if distance_to_object(obj_player)<90 { hspd=0; ale to nic nie daje,nadal jak wróg mnie widzi to idzie w moją stronę i strzela,zamiast się zatrzymać i strzelać.. 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ę