pankracy Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 Cześć wszystkim.. mój wróg jak strzela,to pocisk ,który wydobywa się z prawej strony idealnie wydobywa się z lufy wroga,natomiast ten z lewej już nie... Próbuje to ustawić,ale jak ustawiam,to całkowicie mi wtedy wróg się zatrzymuje i dalej źle strzela.. to mam ustawione instance_create( x+25, y-15, obj_laser) ale nie wiem jak ustawić instance_create( x-25, y+15, obj_laser) wtedy idealnie zarówno z prawej jak i z lewej strony strzelałby pocisk z lufy wroga.. tu kod wroga step GML var stopped; stopped=0; //image_angle = direction; if distance_to_object(obj_player) <=80 { //stopped=1; speed=0; //image_speed=0 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) if ( strzal ) { var i; i = instance_create( x+25, y-15, obj_laser) 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_platforma)) x+=image_xscale*5; speed=4; } if place_free(x,y+1) {gravity = 0.5} else {gravity = 0} if at=1 { at=2 speed=4 } if at=2 { if hspeed<0 { image_xscale = -1; if !place_meeting(x-30,y+10,par_platforma ) speed*=-1 else if place_meeting(x-1,y,par_platforma ) speed*=-1 st=1 } else if hspeed>0 { image_xscale = 1; if !place_meeting(x+30,y+10,par_platforma ) speed*=-1 else if place_meeting(x+1,y,par_platforma ) speed*=-1 st=2 } } //Obrazenia wroga if global.zegarObrazenWroga > 0 { visible = !visible; global.zegarObrazenWroga -= 1; } else { visible = true; } if hp <= 0 { instance_destroy(); dead = true; //wywolujemy alarm gdy wrog jest martwy //tworzy napis i losowa ilosc punktow nad wrogiem global.pScore+=pointvalue z = instance_create(x,y-10,obj_floating_txt); z.txt = "$" + string(pointvalue); z.yspeed = -4; with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_czolgista_ginie) { image_xscale = other.image_xscale; image_yscale = other.image_yscale; hspd = other.hspd; vspd = other.vspd; audio_play_sound(dzwiek_wrog_ginie, 1, false); } if (stopped) hspd=0; // czasowe wskrzeszenie wroga if (dead == true) { instance_create(x,y,obj_spawn_czolgista); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
ediepl Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 Użyj lengthdir(chyba tak to się pisało) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Amaterasu Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 Zamiast y-15 użyj y+15*image_xscale. Wtedy gdy xscale jest równe -1, postać obróci się w lewo i pocisk pojawi się na lewo od postaci, podobnie dla xscale=1. Jeżeli działa odwrotnie, niż powinno, zmień na y-15*image_xscale BARDZO PÓŹNY EDIT (02:53): jestem kretynem, chodziło mi o x+25*image_xscale zamiast 15*image_xscale, co się ze mną dzieje D: Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Marca 2016 Autor Udostępnij Opublikowano 2 Marca 2016 Zamiast y-15 użyj y+15*image_xscale. Wtedy gdy xscale jest równe -1, postać obróci się w lewo i pocisk pojawi się na lewo od postaci, podobnie dla xscale=1. Jeżeli działa odwrotnie, niż powinno, zmień na y-15*image_xscale GML i = instance_create( x+25, y-15*image_xscale, obj_laserek ) o to chodziło? ale to nic nie daje..zmiana y+15 również..i z dziwnej strony wtedy pocisk leci... Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 image_xscale w twoim przypadku jest 1 jak patrzysz w prawo, albo -1 jak w lewo. Jeśli chcesz żeby pocisk stworzył się po prawej stronie, to do x dodajesz 15. x+15. Jeśli chcesz żeby pocisk stworzył się po lewej stronie, to od x odejmujesz 15. x-15; Tak więc, można to zrobić tak GML if(image_xscale==1) var miejsce_x=x+15; if(image_xscale==-1) var miejsce_x=x-15; Ale tak oczywiście nie będziemy robili, skracamy to do prościutkiej matematyki GML var miejsce_x=x+(image_xscale*15); To nie ma prawa nie działać xd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 GML i = instance_create( x+25*image_xscale, y-15, obj_laserek ) A jak miało się nie pojawiać w dziwnym miejscu, skoro zmieniałeś y a nie x? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Marca 2016 Autor Udostępnij Opublikowano 2 Marca 2016 image_xscale w twoim przypadku jest 1 jak patrzysz w prawo, albo -1 jak w lewo. Jeśli chcesz żeby pocisk stworzył się po prawej stronie, to do x dodajesz 15. x+15. Jeśli chcesz żeby pocisk stworzył się po lewej stronie, to od x odejmujesz 15. x-15; Tak więc, można to zrobić tak GMLif(image_xscale==1) var miejsce_x=x+15; if(image_xscale==-1) var miejsce_x=x-15; Ale tak oczywiście nie będziemy robili, skracamy to do prościutkiej matematyki GMLvar miejsce_x=x+(image_xscale*15); To nie ma prawa nie działać xd a więc tak to zrobiłem... dodałem tak: GML var miejsce_x; var miejsce_x=x+(image_xscale*15); teraz to tak wygląda,ale nadal jak w lewo strzela to nie z lufy laser. GML var stopped; stopped=0; //image_angle = direction; if distance_to_object(obj_player) <=80 { //stopped=1; speed=0; 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) if ( strzal ) { var i; var miejsce_x; var miejsce_x=x+(image_xscale*15); i = instance_create( x+25, y-15, obj_laser) 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 at=1 { at=2 speed=4 } if at=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 global.zegarObrazenWroga > 0 { visible = !visible; global.zegarObrazenWroga -= 1; } else { visible = true; } if hp <= 0 { instance_destroy(); dead = true; //wywolujemy alarm gdy wrog jest martwy //tworzy napis i losowa ilosc punktow nad wrogiem global.pScore+=pointvalue z = instance_create(x,y-10,obj_floating_txt); z.txt = "$" + string(pointvalue); z.yspeed = -4; with instance_create(x,y,obj_entity_die) with instance_create(x,y,obj_czolgista_ginie) { 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; // czasowy wskrzeszanie wroga if (dead == true) { instance_create(x,y,obj_spawn_czolgista); } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 tym miejsce_x, chciałem tylko pokazać o co mi chodzi GML var i; var miejsce_x; var miejsce_x=x+(image_xscale*15); i = instance_create( x+25, y-15, obj_laser) Tworzysz zmienną miejsce_x, ale co z tego, jak nic z nią nie robisz xd Ostatecznie powinno to wyglądać tak GML i = instance_create( x+(image_xscale*15), y-15, obj_laser) Musisz analizować kod, a nie tylko kopiować. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Marca 2016 Autor Udostępnij Opublikowano 2 Marca 2016 tym miejsce_x, chciałem tylko pokazać o co mi chodzi GMLvar i; var miejsce_x; var miejsce_x=x+(image_xscale*15); i = instance_create( x+25, y-15, obj_laser) Tworzysz zmienną miejsce_x, ale co z tego, jak nic z nią nie robisz xd Ostatecznie powinno to wyglądać tak GMLi = instance_create( x+(image_xscale*15), y-15, obj_laser) Musisz analizować kod, a nie tylko kopiować. Dzięki Sutikku..analizuje,tylko w błąd mnie wprowadziło użycie y-15 zamiast x,bo przecież lufa od mojego czołgu nie strzela góra dół,tylko lewo prawo;) teraz jest idealnie. Mam jeszcze jedno pytanie..bo walczę z ustawieniem kątów,tzn chodzi mi,że jak jestem np na wyższej platformie i pode mną jest ten wróg czołgista..i on zaczyna strzelać mimo,że nie widzi mnie.. Wolałbym,żeby strzelał jak znajdę się w jego zasięgu w pozycji X Nie wiem,czy użyć colission_line czy innej funkcji. Po prostu niech wróg mnie wykrywa dopiero jak będę w pozycji x a nie y Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 Napisałem Ci jeszcze przed Twoim postem, że używasz złej pozycji :P Użyj collision_line, lub sprawdzaj sobie y gracza. coś jak: GML if abs(y-obj_gracz.y)<20{ //Kod } Abs działa na zasadzie, że zawsze zwraca Ci wartość dodatnią jakbyś nie wiedział ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 Sposobów jest wiele. Pierwszy i chyba najłatwiejszy GML if(y=obj_player.y)//warunek wykrycia { //reszta kodu, po wykryciu } Z tym, że wystarczy, że gracz podskoczy i już nie wykrywa. GML if(abs(y-obj_player.y)<32) { //reszta kodu, po wykryciu } W tym momencie, nawet jeśli podskoczymy, to będziemy wykrywani (chyba, że wyskoczymy wyżej niż 32 piksele) Możemy to zmienić dodając jeden warunek GML if(abs(y-obj_player.y)<32) if(obj_player.y>=y) { //reszta kodu, po wykryciu } W tym momencie, sprawdzamy czy odległość y jest mniejsza od 32, a potem sprawdzamy czy gracz nie jest pod wrogiem. Chociaż ostatecznie najlepszym sposobem byłoby if(collision_line), to napisałem Ci różne sposoby, tak wiesz, w celach edukacyjnych ;d edit: Gibki, ciągle się mijamy i piszemy praktycznie to samo xd Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Marca 2016 Autor Udostępnij Opublikowano 2 Marca 2016 Sposobów jest wiele. Pierwszy i chyba najłatwiejszy GMLif(y=obj_player.y)//warunek wykrycia { //reszta kodu, po wykryciu } Z tym, że wystarczy, że gracz podskoczy i już nie wykrywa. GMLif(abs(y-obj_player.y)<32) { //reszta kodu, po wykryciu } W tym momencie, nawet jeśli podskoczymy, to będziemy wykrywani (chyba, że wyskoczymy wyżej niż 32 piksele) Możemy to zmienić dodając jeden warunek GMLif(abs(y-obj_player.y)<32) if(obj_player.y>=y) { //reszta kodu, po wykryciu } W tym momencie, sprawdzamy czy odległość y jest mniejsza od 32, a potem sprawdzamy czy gracz nie jest pod wrogiem. Chociaż ostatecznie najlepszym sposobem byłoby if(collision_line), to napisałem Ci różne sposoby, tak wiesz, w celach edukacyjnych ;d edit: Gibki, ciągle się mijamy i piszemy praktycznie to samo xd Serdeczne dzięki chłopaki za ładny opis;) czyli zamierzony cel osiągnę w taki sposób GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) if(obj_player.y>=y) { i tu reszta kodu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 Tak, racja Suttiku, jednakże co do Twojego ostatniego kodu to nie łatwiej zmienić go do jednego warunku? GML if(y-obj_player.y>y-32 && obj_player.y<=y) { //reszta kodu, po wykryciu } A i tak drugi warunek napisałeś na odwrót. Jeśli gracz podskoczy, to jego y jest mniejszy, czyli musi mieć mniej niż y przeciwnika. I błagam, jak piszesz dwa ify, to dawaj wszędzie klamry. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Sutikku Opublikowano 2 Marca 2016 Udostępnij Opublikowano 2 Marca 2016 byłoby łatwiej, ale sam nie wiedziałem czy autor tematu wie jak to jest z tymi podwójnymi warunkami (chociaż jak teraz patrzę na cały kod, to sam tego używa, to nie byłoby problemu) Ale ogólnie już się przestawiłem na &&, zamiast dwóch warunków c; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 2 Marca 2016 Autor Udostępnij Opublikowano 2 Marca 2016 byłoby łatwiej, ale sam nie wiedziałem czy autor tematu wie jak to jest z tymi podwójnymi warunkami (chociaż jak teraz patrzę na cały kod, to sam tego używa, to nie byłoby problemu) Ale ogólnie już się przestawiłem na &&, zamiast dwóch warunków c; Czy to tak przypadkiem nie ma być chłopaki? Kaktus Twoje rozwiązanie nie działa prawidłowo. GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) } reszta kodu { Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 GML if(y-obj_player.y<32 && obj_player.y<=y) { //reszta kodu, po wykryciu } O tak powinno być, sorki za błąd. Możesz też użyć absu, ale tutaj nie ma to większego sensu, ponieważ Ci zależy tylko, jeśli gracz będzie nad Tobą(drugi warunek o tym świadczy). Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 GMLif(y-obj_player.y<32 && obj_player.y<=y) { //reszta kodu, po wykryciu } O tak powinno być, sorki za błąd. Możesz też użyć absu, ale tutaj nie ma to większego sensu, ponieważ Ci zależy tylko, jeśli gracz będzie nad Tobą(drugi warunek o tym świadczy). W porządku;) Ale jednak Kaktusie musi być te rozwiązanie od Sutikku,bo te od Ciebie nie działa prawidłowo,tzn wróg całkowicie już przestaje nas widzieć i strzelać.. No nic ważne,że działa jeszcze raz dzięki;) GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) } reszta kodu { Jeszcze ostatnie pytanie mam,bo próbuje w kodzie ustawić zmiane sprita na sprita ataku wroga jak zbliży się mój bohater do niego..to wróg zmieni sprita na sprita ataku i zacznie strzelać,a jak się oddale poza jego dystans,to powróci do pierwotnego sprita.. step wroga GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) //if(y-obj_player.y<32 && obj_player.y<=y) { sprite_index = spr_czolgista_atakuje; } else { sprite_index = spr_czolgista; speed=0; 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 ( strzal ) { var i; var miejsce_x; i = instance_create( x+(image_xscale*25), y-15, obj_laser) 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; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 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; Po co masz tutaj pozycje y? To nie będzie działało sprawnie, ponieważ będzie obrócony w prawo, jeśli x i y bohatera jest większe od wroga, a w lewo, jeśli x i y bohatera będzie mniejsze od wroga. Czyli w jednym przypadku będzie się zmieniało tylko, jeśli gracz jest nad wrogiem a w drugim jeśli jest pod wrogiem. I druga sprawa masz napisane warunki na odwrót. W sensie, że jeśli gracz jest na lini ostrzału, to czołg ma mieć sprite czołgisty i nic nie robić, a jeśli gracz nie będzie na tejże lini, to wtedy ma atakować. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 Kaktusie jak dam warunki odwrotnie plus Twoje rozwiązane, to wiesz mi nic się nie dzieje..wróg wcale nie reaguje na gracza..tylko sobie jeździ nie strzela jak mam w taki sposób jak niżej,to wróg wykrywa gracza...zatrzymuje się i strzela.. GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) //if(y-obj_player.y<32 && obj_player.y<=y) { speed=0; 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; //tu reszta kodu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 Usuń te pozycje y z warunków co do image_xscale. No to chyba działa, czy jak Ty chcesz? Żeby dalej jeździł, czy co? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 Usuń te pozycje y z warunków co do image_xscale. No to chyba działa, czy jak Ty chcesz? Żeby dalej jeździł, czy co? Kaktusie działa idealnie ..faktycznie Y powodowały to,że wróg z opóźnieniem czasem obracał się w stronę gracza i strzelał.teraz reaguje błyskawicznie,czy to jest z lewej,czy z prawej strony.. GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) //if(y-obj_player.y<32 && obj_player.y<=y) { speed=0; if (obj_player.x>x) image_xscale=1; else if (obj_player.x<x) image_xscale=-1; //reszta kodu Czyli tu nie da się zmienić sprita czołgisty na sprita ataku jak znajdę się w zasięgu czołgisty? i potem jak oddale się z tego zasięgu,to powróci czołgista do pierwotnego sprita? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 Jak to nie? Napisz po prostu sprite_index=cos tam gdzie ma być :P Tj atak, jeśli jest w zasięgu i zwykły gdy nie jest w zasięgu. I nie działało z opóźnieniem, tylko niekiedy wgl nie działało :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 Jak to nie? Napisz po prostu sprite_index=cos tam gdzie ma być :P Tj atak, jeśli jest w zasięgu i zwykły gdy nie jest w zasięgu. I nie działało z opóźnieniem, tylko niekiedy wgl nie działało :P Kaktusie jestem Ci wdzięczy za tą radę;) co do zmiany sprita na atakującego udało mi się,ale nie wiem,gdzie wstawić po jakim warunku,że jak się już oddale od wroga,to żeby zmienił się z powrotem na sprita normalnego... obecnie tak to wygląda step wroga GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) { sprite_index = spr_czolgista_atakuje;//to dziala i czolgista jak mnie widzi zmienia sprita na atakujacego speed=0; if (obj_player.x>x) image_xscale=1; else if (obj_player.x<x) image_xscale=-1; if ( strzal ) { var i; var miejsce_x; i = instance_create( x+(image_xscale*25), y-15, obj_laser) 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; } //dalsza czesc kodu Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 Masz do wyboru else po dwóch warunkach: GML if distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) { }else{ //Warunek 2 } }else{ //Warunek 1 } I teraz sprawa wygląda następująco: Jeśli dasz w Warunku 1, to będzie zmieniał się na zwykłego czołgistę, jeśli gracz się za bardzo oddali. Jeśli dasz w Warunku 2, to będzie zmieniał się na zwykłego czołgistę, jeśli nie będzie na linii strzału(idealnie, tak?), ale jest taki myk, że jeśli gracz oddali się od czołgisty o ponad 80 pix będąc cały czas na linii strzału, to wtedy cały czas pozostanie w sprite ataku. Jakie jest rozwiązanie? Połącz te warunki, bo i tak one służą w tym samym celu ;) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 Masz do wyboru else po dwóch warunkach: GMLif distance_to_object(obj_player) <=80 { if(abs(y-obj_player.y)<32) && (obj_player.y>=y) { }else{ //Warunek 2 } }else{ //Warunek 1 } I teraz sprawa wygląda następująco: Jeśli dasz w Warunku 1, to będzie zmieniał się na zwykłego czołgistę, jeśli gracz się za bardzo oddali. Jeśli dasz w Warunku 2, to będzie zmieniał się na zwykłego czołgistę, jeśli nie będzie na linii strzału(idealnie, tak?), ale jest taki myk, że jeśli gracz oddali się od czołgisty o ponad 80 pix będąc cały czas na linii strzału, to wtedy cały czas pozostanie w sprite ataku. Jakie jest rozwiązanie? Połącz te warunki, bo i tak one służą w tym samym celu ;) Czyli w warunku;) musze uwzględnić..że jak bohater oddali się na odpowiednią odległość,to sprite wroga czolgisty ataku powroci do pierwotnego stanu;)? GML if distance_to_object(obj_player) <=80 //jak nas widzi if distance_to_object(obj_player) > 100 //jak nas juz nie widzi Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 GML if distance_to_object(obj_player) <=80 && (abs(y-obj_player.y)<32) && (obj_player.y>=y){ //Sprite atakującego czołgisty i atak cały }else{ //Srpite czołgisty i to co ma robić jak nie jest w trakcie ostrzału } Źle, że napisałem tam warunek. Chodziło mi o to, że to się odnosi do else warunku który już masz :P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 GMLif distance_to_object(obj_player) <=80 && (abs(y-obj_player.y)<32) && (obj_player.y>=y){ //Sprite atakującego czołgisty i atak cały }else{ //Srpite czołgisty i to co ma robić jak nie jest w trakcie ostrzału } Źle, że napisałem tam warunek. Chodziło mi o to, że to się odnosi do else warunku który już masz :P Ja tak już wcześniej robiłem,ale czołgista zaczął wariować..cały czas strzela mimo,że mnie nie widzi;) te Kaktusiku niżej rozwiązanie nie jest dobre;) GML if distance_to_object(obj_player) <=80 && (abs(y-obj_player.y)<32) && (obj_player.y>=y){ sprite_index = spr_czolgista_atakuje; }else{ sprite_index = spr_czolgista; } speed=0; if (obj_player.x>x) image_xscale=1; else if (obj_player.x<x) image_xscale=-1; if ( strzal ) { var i; var miejsce_x; i = instance_create( x+(image_xscale*25), y-15, obj_laser) 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; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 3 Marca 2016 Udostępnij Opublikowano 3 Marca 2016 Naucz się poprawnie stosować warunki :P GML if distance_to_object(obj_player) <=80 && (abs(y-obj_player.y)<32) && (obj_player.y>=y){ //TUTAJ CAŁY KOD NA STRZELANIE I SPRITE_INDEX ATAKU } else { sprite_index=spr_czolgista; 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; } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pankracy Opublikowano 3 Marca 2016 Autor Udostępnij Opublikowano 3 Marca 2016 Naucz się poprawnie stosować warunki :P GMLif distance_to_object(obj_player) <=80 && (abs(y-obj_player.y)<32) && (obj_player.y>=y){ //TUTAJ CAŁY KOD NA STRZELANIE I SPRITE_INDEX ATAKU } else { sprite_index=spr_czolgista; 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; } Dobrze nauczę się;) już się uczę;) działa jak należy ;) jesteś niemożliwy Kaktusie;) Powiedz mi jeszcze skąd u Ciebie pomysł na taką nazwę awatara? 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ę