Gibki Kaktus Opublikowano 10 Kwietnia 2017 Udostępnij Opublikowano 10 Kwietnia 2017 Witam, mam pewien dziwny bug. Mianowicie mam sobie obiekt o_champion, który jest podpięty pod obiekt przeciwnicy. No i cóż, mam sobie w tym o_championie kod, który nie działa, bo nie wykrywa mi gracza, pomimo, iż reszta przeciwników go wykrywa. Z tego co zauważyłem to normalnie wykrywa, a nie wykrywa go jak jest poza viewem i zostaje deaktywowany. Ale to i tak dziwne, bo w innych przeciwnikach mi nie wywala takiego błędu z graczem :/ Tutaj jest kod błędu: ERROR!!! :: ################################################################################ ############ FATAL ERROR in action number 1 of Step Event0 for object o_champion: Unable to find any instance for object index '106757' name '<undefined>' at gml_Object_o_champion_StepNormalEvent_1 (line 41) - if abs(x-cel.x)<250 && distance_to_object(cel)<250 goni=1 else goni=0; ################################################################################ ############ Tutaj podaje wam cały step z o_championa: GML var cel=global.graczek[1]; var ocel=noone if global.gracze=1 { cel=global.graczek[1] } else { if distance_to_object(global.graczek[1])<distance_to_object(global.graczek[2]) && global.graczek[1].ginie=0 { ocel=global.graczek[2]; cel=global.graczek[1]; } else { ocel=global.graczek[1]; if global.graczek[2].ginie=0 cel=global.graczek[2] else cel=global.gracze[1]; } } //Odpych if hspeed>0 { hspeed-=0.2 } if hspeed<0 { hspeed+=0.2 } if atakuje=2 && hspeed<=2 && hspeed>=-2 hspeed=0; if moze>0 moze--; //Grawitacja if place_free(x,y+1) {gravity = 0.5} else {gravity = 0} if ginie=0 && stun=0{ //Kod na chodzenie if goni=0 && stoi=0{ if abs(x-cel.x)<250 && distance_to_object(cel)<250 goni=1 else goni=0; if zmien<1 and vspeed=0{ zmien=random(2*room_speed) kierunek=irandom(2) } if zmien>0{ if kierunek=1{ image_xscale=-1 if place_free(x-spd,y){ x-=spd/2 sprite_index=sprit; } image_speed=0.3 }else{ image_xscale=1 if place_free(x+spd,y){ x+=spd/2 sprite_index=sprit; } image_speed=0.3 } } }else if goni=1 && cel.image_alpha=1{ if atakuje=0 && distance_to_object(cel)>dystans/2{ if cel.x>x image_xscale=1 else image_xscale=-1; if place_free(x+spd*image_xscale,y) {x+=spd*image_xscale; sprite_index=sprit} else sprite_index=spr; } if atakuje=0 && moze=0 && distance_to_object(cel)<dystans{ moze=coile*room_speed; atakuje=1; image_index=0; sprite_index=sprit_atak image_speed=0.5; if cel.x>x image_xscale=1 else image_xscale=-1; }else if atakuje=1 && image_index>5{ atakuje=2; kol=instance_create(x,y,o_wilk_kolizja); kol.pan=id; kol.atak=atak; kol.sprite_index=spr_champion_kolizja; }else if atakuje=2{ if place_free(x+(spd)*image_xscale,y){ x+=(spd)*image_xscale; } if image_index>9{ atakuje=3; with(kol) instance_destroy(); } } } }else if stun=1 && ginie=0{ atakuje=0; image_speed=0.3; sprite_index=spr; stoi=0; } if hp<=0 { with(kol) instance_destroy(); if ginie=0 { dusz=instance_create(x,y,dusza) dusz.sprite_index=duszas dusz.image_xscale=image_xscale dusz.pan=id ginie=1 sprite_index=sprit_ginie image_speed=0.4 image_index=0 } } if stun=1 and s=0 { s=instance_create(x,y-yp,stunik) s.pan=id s.niszcz=0 } if s!=0 { if stun=0 or ginie!=0 { if instance_exists(s) s.niszcz=1; } } Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Uzjel Opublikowano 10 Kwietnia 2017 Udostępnij Opublikowano 10 Kwietnia 2017 Dodaj zabezpieczenie if instance_exists(cel) i zobacz co się będzie działo. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 10 Kwietnia 2017 Autor Udostępnij Opublikowano 10 Kwietnia 2017 Dobra, już wiem co było nie tak. Jeśli przeciwnik ginął zanim miał jakąś kolizję, to wtedy kol=0, a to był kod gracza i go usuwało xD Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Administratorzy gnysek Opublikowano 11 Kwietnia 2017 Administratorzy Udostępnij Opublikowano 11 Kwietnia 2017 W którymś runtime kilka miesięcy temu nastąpiła zmiana, że jak masz instace_destroy() to się wykonuje natychmiast, a nie po skończeniu danego eventu - mi się nagle 3-4 miesiące temu zaczął pojawiać podobny błąd po takiej linijce: GML var a = instance_create(0,0,obj_enemy); a.direction = irandom_range(0,90); a sam obj_enemy miał w create: GML if instance_count(obj_enemy) > 50 instance_destroy(); No i kawałek z "a.direction" się wywalał, bo obiektu już nie było - a jestem niemal pewien, że kiedyś instance_destroy na stos się odkładało i dopiero po danym fragmencie kodu/evencie wykonywało. Musiało tak być, bo ten kod miał ze 3-4 lata i nagle dopiero teraz się zaczął wywalać. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Gibki Kaktus Opublikowano 11 Kwietnia 2017 Autor Udostępnij Opublikowano 11 Kwietnia 2017 Tak, właśnie też sam to zauważyłem, że nastąpiły pewne zmiany w wykonywaniu kodu. No ale na szczęście problem już rozwiązany :D 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ę