Skocz do zawartości

Temat zbiorczy na drobnostki


Chell

Rekomendowane odpowiedzi

W create mam

 

GML
p=obj_Player

 

 

w draw mam

 

GML
draw_text_transformed(x,y-200,p,4,4,0)

 

I wyświetla mi bez problemu na bieżaco id (poczatkowo to jest obj_Player ale potem sie zmienia)

 

Ale jak zrobie

 

GML
draw_line_colour(x,y,p.x,p.y,c_red,c_red)

 

To dostaje błąd

 

Variable <unknown_object>.y(1, -2147483648) not set before reading it.

at gml_Object_obj_Enemy_parent_DrawEvent_1 (line 9) - draw_line_colour(x,y,p.x,p.y,c_red,c_red)

 

Co się dzieje?Zmienna ustalona na 10000%

Odnośnik do komentarza
Udostępnij na innych stronach

Chłopaki ja rozumiem ten błąd,przerabiałem setki razy coś takiego,przeczytajcie jeszcze raz jaki mam problem.

 

 

Ta zmienna działa w każdym przypadku poza draw_line.Wtedy nagle "nie istnieje" - ale jezeli uzyje jej w jakikolwiek inny sposób i dokładnie w tym samym miejscu kodu-wtedy wszystko jest ok.Co jest nie tak?

 

 

Jeżeli to nie bug to bardzo jestem ciekaw jakie jest wytłumaczenie bo obiekt istnieje ,zmienna jest przypisana, mogę np sobie zrobić

 

GML
with p {effect_create_above(ef_spark,x,y,5,c_red)}
i bedzie działało.Ale draw_line od razu błąd- i co ciekawe czepia się tylko Y ....

 

"Variable <unknown_object>.y(1, -2147483648) not set before reading it."

Odnośnik do komentarza
Udostępnij na innych stronach

  • 2 tygodnie później...

w konsoli, jak chcę odpalić grę, to po tych logach:

 

Room_Prepare()

Sound_Prepare()

InitGraphics()

Finished PrepareGame()

Run_Start

StartGame()

 

nic się nie dzieje... nie jestem pewien czym to jest spowodowane. Ktoś ja jakieś rozwiązanie?

Odnośnik do komentarza
Udostępnij na innych stronach

Chłopaki ja rozumiem ten błąd,przerabiałem setki razy coś takiego,przeczytajcie jeszcze raz jaki mam problem.

 

 

Ta zmienna działa w każdym przypadku poza draw_line.Wtedy nagle "nie istnieje" - ale jezeli uzyje jej w jakikolwiek inny sposób i dokładnie w tym samym miejscu kodu-wtedy wszystko jest ok.Co jest nie tak?

 

 

Jeżeli to nie bug to bardzo jestem ciekaw jakie jest wytłumaczenie bo obiekt istnieje ,zmienna jest przypisana, mogę np sobie zrobić

 

GML
with p {effect_create_above(ef_spark,x,y,5,c_red)}
i bedzie działało.Ale draw_line od razu błąd- i co ciekawe czepia się tylko Y ....

 

"Variable <unknown_object>.y(1, -2147483648) not set before reading it."

Eventy draw są troszkę niezależne od innych eventów. Tak, twoja zmienna jest ustawiona ale na coś co nie ma własnego y. Warto się zawsze zabezpieczać sprawdzając czy obiekt/instance istnieje. A to wygląda jakbyś przypisał p=obj_Player stworzył drugi obj_Player i usunął pierwszy. Albo tak jakbyś dezaktywował ten obiekt. Powodów może być wiele a na pewno jednym z nich jest bałagan w kodzie.

 

 

 

w konsoli, jak chcę odpalić grę, to po tych logach:

 

Room_Prepare()

Sound_Prepare()

InitGraphics()

Finished PrepareGame()

Run_Start

StartGame()

 

nic się nie dzieje... nie jestem pewien czym to jest spowodowane. Ktoś ja jakieś rozwiązanie?

Masz nieskończoną pętlę gdzieś w create. Gra utknęła na evencie create i nie doszła jeszcze do draw aby coś pokazać.

Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

create

GML
hp=10

hpmax=hp //maksymalne hp do healthbaru

linelength= hp / hpmax *100

a=linelength

 

step

 

GML
linelength= hp / hpmax*100

if (a!=linelenght){

b=a-linelenght

c-=a

}

 

błąd:

GML
Variable obj_test_dummy.linelenght(100139, -2147483648) not set before reading it.

at gml_Object_obj_Enemy_parent_StepNormalEvent_1 (line 42) - if (a=linelenght){

 

Może jak naprawdę jestem tępy ale niech ktoś mi wytłumaczy : jak może być błąd nie nadania wartości zmiennej skoro dosłownie linijkę wyżej jest ona określona(do tego jest już wczesniej okreslona w create)

Odnośnik do komentarza
Udostępnij na innych stronach

Threef : nie wiem jak to możliwe bo kopiowałem a nie przepisywałem , magia

 

Kaktus:masz rację

 

Finalnie i tak działający kod jest bezużyteczny;p

 

Stąd mam kolejne,bardziej skomplikowane pytania

 

1.Ktoś ma pomysł jak zrobić żeby draw_healthbar był zależny w przestrzeni od rotacji gracza?? Mam kamerę która obraca się razem z obrotem gracza w top down, ustawiony "na sztywno" pasek staje w miejscu , a ma być "za plecami".Jak ustawie go względem punktów które poruszają się razem z graczem w przestrzeni to się mutuje jak opętany (zmienia ksztalty)

 

2.Mam gotowy skrypt na okragly healthbar, swietna sprawa-jakby ktos potrzebowal to prosze

 

GML
///draw_healthbar_circular(center x, center y, radius, start angle, percent health, sprite)

var cx,cy,rad,sang,hp,tex,steps,thick,oc;

cx=argument0

cy=argument1

rad=argument2

sang=argument3

hp=argument4

tex=sprite_get_texture(argument5,0)

steps=200

thick=sprite_get_height(argument5)

 

if ceil(steps*(hp/100)) >= 1 {

 

oc=draw_get_color()

draw_set_color(c_red)

 

var step,ang,side,hps,hpd;

step=0

ang=sang

side=0

draw_primitive_begin_texture(pr_trianglestrip,tex)

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang+360/steps),cy+lengthdir_y(rad-thick/2+thick*side,ang+360/steps),side,side)

side=!side

hps=hp/(ceil(steps*(hp/100))+1)

hpd=0

repeat ceil(steps*(hp/100)+1) {

step+=1

 

if step=ceil(steps*(hp/100)+1) { //final step

ang+=(360/steps)*(hp - hpd)/2

if ang>sang+360 ang=sang+360

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

}

else {

ang+=360/steps

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

}

hpd+=hps

}

draw_primitive_end()

 

draw_set_color(oc)

}

 

Ale jest jeden problem- healthbar maleje od lewej do prawej- a chiałbym odwrotnie- jak to osiągnąć w tym kodzie??

 

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

Strzelam, zupełnie na ślepo więc backup sobie zrób, że zamiana cx+lengthdir_x na cx-lengthdir_x powinna załatwić sprawę tego w którą stronę pasek się obraca.

Co do błędu, warto się nauczyć czytać błędy. Kod błędu

Variable obj_test_dummy.linelenght(100139, -2147483648) not set before reading it.
at gml_Object_obj_Enemy_parent_StepNormalEvent_1 (line 42) - if (a=linelenght){

 

Mówi, że:

1. Błąd jest w obj_Enemy_parent

2. W Stepie

3. W Klocku #1

4. W lini 42

5. Typ błędu to "Zmienna nie ustawiona przed odczytem" czyli "Zmienna nie istnieje".

 

Rozwiązaniem jest sprawdzić czy zmienne a oraz linelenght istnieją oraz nie mają literówek, jak wcześniej podał threef. Zakładam że literówka, ponieważ pisze się length nie lenght.

Odnośnik do komentarza
Udostępnij na innych stronach

Spoko, nie mam problemu z czytaniem błędu, rzeczywiscie byla literówka- tak jak juz napisalem.Zostaly mi problemy z poprzedniego posta

 

I dodatkowo : jak zrobic zeby health_bar u każdego wroga mial zawsze taka sama dlugosc na rysunku niezaleznie od watosci, tylko zeby roznilo sie tempo zmniejszania?

Odnośnik do komentarza
Udostępnij na innych stronach

 

GML
GML

///draw_healthbar_circular(center x, center y, radius, start angle, percent health, sprite)

var cx,cy,rad,sang,hp,tex,steps,thick,oc;

cx=argument0

cy=argument1

rad=argument2

sang=argument3

hp=argument4

tex=sprite_get_texture(argument5,0)

steps=200

thick=sprite_get_height(argument5)

 

if ceil(steps*(hp/100)) >= 1 {

 

oc=draw_get_color()

draw_set_color(c_red)

 

var step,ang,side,hps,hpd;

step=0

ang=sang

side=0

draw_primitive_begin_texture(pr_trianglestrip,tex)

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang+360/steps),cy+lengthdir_y(rad-thick/2+thick*side,ang+360/steps),side,side)

side=!side

hps=hp/(ceil(steps*(hp/100))+1)

hpd=0

repeat ceil(steps*(hp/100)+1) {

step+=1

 

if step=ceil(steps*(hp/100)+1) { //final step

ang+=(360/steps)*(hp - hpd)/2

if ang>sang+360 ang=sang+360

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

}

else {

ang+=360/steps

draw_vertex_texture(cx+lengthdir_x(rad-thick/2+thick*side,ang),cy+lengthdir_y(rad-thick/2+thick*side,ang),side,side)

side=!side

}

hpd+=hps

}

draw_primitive_end()

 

draw_set_color(oc)

}

 

Tak wyglada jego kod

 

 

Odnośnik do komentarza
Udostępnij na innych stronach

e55524dc5414d.png

 

 

Problemy:

 

1.Najważniejszy- każdy bar jest inny a chce żeby niezależnie od wartości były równe tylko w różnym tempie malały

2.Potrzebny mi w rozmiarze jakiś 70stopni - tak zeby był cały tylko łuk za plecami- ale to jest łatwe jeżeli będzie punkt 1 zrealizowany

3.Powinno maleć od prawej do lewej a jest odwrotnie i nie wiem co za to odpowiada w tym kodzie

Odnośnik do komentarza
Udostępnij na innych stronach

1. Na pewno postaci 2, 3 i 4 maja maxhp ustawione na 4,8,2 ?

2. zamiast 100*hp/maxhp zrób 70*hp/maxhp i zmień kąt startowy na direction + 35(albo -35, mówię z głowy)

3. A testowales to co mowilem pare postow wyzej aby odwrocic lengthdir?

 

 

Edit Przetestowałem i jak zamienisz +lengthdir_x na -lengthdir_x w liniach: 22.24.26.36.38.42 to działa na odwrót tak jakbyś chciał.

Odnośnik do komentarza
Udostępnij na innych stronach

Właśnie przed chwilą też testowałem i rzeczywiście działa idealnie , dzięki :)

 

 

Problem tylko z wizualizacją długości bo tutaj nie widzę postępu :/

 

 

Na screenie takie wartości HPmax są jak napisane- włącznie z tym ze nr.1 ma kółko 4x zapętlone...

Odnośnik do komentarza
Udostępnij na innych stronach

create

 

GML
hp=10

hpmax=hp

linelength=0

 

step

 

GML
linelength=70* (hp / hpmax)

 

draw

 

GML
scr_draw_healthbar(x,y,300,direction + 35,linelength,spr_enemy_health)

draw_text_transformed(x+300,y,"hp="+string(hp),4,4,image_angle)

 

 

Zmieniam "hp" w creation code poszczegolnych obiektow

 

df00a8d5a55db.png

 

Co jest nie tak??Teraz dodatkowo jakies poprzeczne paski sie pojawily u tego z 40..

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