Skocz do zawartości

error w draw przy tworzeniu paska hp


Paqoo

Rekomendowane odpowiedzi

Tak wygląda kod błędu:

ERROR in

action number 1

of Draw Event

for object o_swiatynia:

 

In script draw_ob_hp:

Error in code at line 12:

pasek = ( czas / czas_max ) * dlugosc;

 

at position 19: Division by 0.

 

W create obiektu mam:

imie='Świątynia'
hlt=100
max_hlt=100

 

A draw to:

draw_set_font(font1)
draw_set_color(c_white)
draw_sprite_ext(sprite_index,image_index,x,y,1,1,image_angle,noone,1);//rysowanie grafiki
draw_text(x-(sprite_width/2)+10,y-40,imie);
draw_ob_hp(x-(sprite_width/2)+15,y-20,x+sprite_width,y-15,hlt,max_hlt);//rysowanie paska hp

 

Skrypt rysowania paska to:

var pasek, czas, czas_max, dlugosc, xx, yy, xx1, yy1, kolor, kolor1;

xx = argument0;
yy = argument1;
xx1 = argument2;
yy1 = argument3;
czas = argument4;
czas_max = argument5;

dlugosc = xx - xx1;

pasek = ( czas / czas_max ) * dlugosc;
kolor1 = draw_get_color();
draw_set_color(c_white);
draw_rectangle(xx,yy,xx1,yy1,false);
draw_set_color(kolor1);
kolor = merge_color(c_red,c_lime,czas/czas_max);
draw_rectangle_color(xx,yy,xx-pasek,yy1,kolor,kolor,kolor,kolor,false);
depth=-30

 

Ktoś wie o co chodzi? Kiedyś chyba coś takiego miałem. Próbowałem z with(self) ale nie działa. Nie mogę wpisać przecież tych zmiennych z create w draw! (wtedy działa, ale nie da się ich zmieniać)

Odnośnik do komentarza
Udostępnij na innych stronach

In script draw_ob_hp:

Error in code at line 12:

pasek = ( czas / czas_max ) * dlugosc;

 

at position 19: Division by 0.

Jak sam widzisz zmienna czas_max jest równa 0, a nie może być jeśli chcesz przez nią dzielić :P

GML
if(czas_max!=0)

pasek = ( czas / czas_max ) * dlugosc;

Odnośnik do komentarza
Udostępnij na innych stronach

Problem lezy w tym:

czas_max = argument5

Teraz do Ciebie nalezy, aby argument5, jaki podajesz przy wywolaniu funkcji, byl rozny od 0 inaczej nic nie poradzisz na to ze masz blad. matematyki nie oszukasz, dopoki chcesz dzielic przez 0, to bedziesz mial blad

Odnośnik do komentarza
Udostępnij na innych stronach

zrob reset GMa, jak nie podziala to reset kompa. Zabawne ale GM ma swoje humorki i rozne bledy pluje w najmniej oczekiwanym momencie i reset kompa mi zawsze pomagal :D

Odnośnik do komentarza
Udostępnij na innych stronach

Z matematyki dobrze wiadomo, że przez 0 nie można dzielić, a czasami, jeżeli czas_max jest równe 0 to tak się sypie =/

Samo "division by 0" oznacza "dzielenie przez 0", więc nie wiem w czym problem.

Wystarczy tylko analizować i nie dopuścić, by czas_max było równe 0

 

EDIT: Qrde... 3 postów mi nie pokazało... =/ - myślałem, że nikt nie odpowiedział

Odnośnik do komentarza
Udostępnij na innych stronach

kolor to tez liczba, dla sprawdzenia: show_message(string(c_green))

Odnośnik do komentarza
Udostępnij na innych stronach

In script draw_ob_hp:
Error in code at line 12:
pasek = ( czas / czas_max ) * dlugosc;

at position 19: Division by 0.

 

Napisałem już to. Cały czas ma problem z dzieleniem. Wystarczy, że zmienię zmienne na globalne i nie ma już problemu z dzieleniem. Hahahaha!

Jak mam napisać żeby nie trzeba było globalnych używać?

Odnośnik do komentarza
Udostępnij na innych stronach

draw_ob_hp(x-(sprite_width/2)+15,y-20,x+sprite_width,y-15,hlt,max_hlt);//rysowanie paska hp

 

Przecież podałem...

 

Metodą łańcuchową sprawdź co jest nie tak.

Pierwszy raz słyszę to sformułowanie. Jakbym to znał to bym nie pytał nikogo. Więc po co piszesz w ten sposób?

Odnośnik do komentarza
Udostępnij na innych stronach

odpal gre w debug mode i kliknij na plusik, dopisz se tam zmienną np object1.max_hlt i obserwuj jaką ma wartość. A jak nie pomoże, możesz mi w zaufaniu przesłać projekt, obejrzę i wtedy napewno dojde co nie tak. Już tak pomagałem, bać się nie musisz :).

 

Zawsze możesz jeszcze zastosować radę gynska, którą chyba przeoczyłeś.

Odnośnik do komentarza
Udostępnij na innych stronach

  • Administratorzy

no tak, bo w tym co ja przytoczyłem nigdy nie było dzielenia przez 0, więc nigdy nie było błędu.

ew. zrób tak:

 

GML
if czas_max>0

{

pasek = ( czas / czas_max ) * dlugosc;

}

else

{

pasek = 0;

}

Odnośnik do komentarza
Udostępnij na innych stronach

A co powiesz na to? :P

ERROR in

action number 1

of Draw Event

for object o_swiatynia:

 

In script draw_ob_hp:

Error in code at line 23:

kolor = merge_color(c_red,c_lime,czas/czas_max);

 

at position 40: Division by 0.

 

Zastosowałem to do kolor i teraz pokazuje biały pasek z zerem zamiast nazwy :D Chyba nie o to mi chodziło.

Odnośnik do komentarza
Udostępnij na innych stronach

Jakbym się nudził tak jak ty, to na pewno bym tak robił. Tak w ogóle to czasami mam ochotę urwać komuś język jak widzę takiego Tymona, któremu się nie chce pomóc ale zawsze doradzi tak jak nie trzeba :) Jakbym miał ochotę to bym sam to pisał. Widocznie sprawia mi to ból dlatego wole czasami skorzystać z czyjejś pracy. To chyba nie zbrodnia? Po prostu oszczędzam czas.

Odnośnik do komentarza
Udostępnij na innych stronach

Wszyscy podali Ci rozwiązanie problemu: nie dziel przez zero. :)

 

To chyba nie zbrodnia? Po prostu oszczędzam czas.
O ile autor na to pozwala to nie.

Jakbym miał ochotę to bym sam to pisał.
Wiesz, pisanie takich rzeczy jest tak trywialnie proste... więc albo nie wiesz jak, albo... sam nie wiem co.
Odnośnik do komentarza
Udostępnij na innych stronach

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ę
  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...