Milord Opublikowano 12 Października 2015 Udostępnij Opublikowano 12 Października 2015 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 Więcej opcji udostępniania...
lenin Opublikowano 12 Października 2015 Udostępnij Opublikowano 12 Października 2015 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 Więcej opcji udostępniania...
Milord Opublikowano 12 Października 2015 Autor Udostępnij Opublikowano 12 Października 2015 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 Więcej opcji udostępniania...
lenin Opublikowano 12 Października 2015 Udostępnij Opublikowano 12 Października 2015 to przy kolejnych dodaj else przed if i zobacz jak to będzie wyglądać i poprawiaj sobie dalej powoli, znajdź najlepsze rozwiązanie. Chodzi o to żeby nie mogł się zmienić kilka razy image_xscale Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Milord Opublikowano 12 Października 2015 Autor Udostępnij Opublikowano 12 Października 2015 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 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ę