Skocz do zawartości
  • Ogłoszenia

  • Gdzie świętować urodziny GMCLANu   27 użytkowników zagłosowało

    1. 1. Gdzie świętować urodziny GMCLANu


      • Warszawa (bo w centrum)
      • Szczecin (bo tam mieszka Ranma i narodził się GMCLAN)

    Żeby zagłosować w tej ankiecie, prosimy się zalogować lub zarejestrować. Zobacz temat
  • 0
Gibki Kaktus

Nie wykrywa gracza

Pytanie

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;

}

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

4 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Uzjel    11

Dodaj zabezpieczenie if instance_exists(cel) i zobacz co się będzie działo.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
gnysek    34

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ć.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0

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

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Tylko 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ę tutaj.

Zaloguj się tutaj

  • Przeglądający   0 użytkowników

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

×