Skocz do zawartości
Chell

Temat zbiorczy na drobnostki

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%

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Z tego co wiem to nie można po prostu ustawić zmienną na obiekt, bo może istnieć wiele instancji jednego obiektu.

GML
p = instance_create(x,y, obj_Player)//tworzy instancję i odwołuje się do niej

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
not set before reading it.
Znaczy że nie ma tego obiektu w roomie/jest nie aktywna. Tzn kiedy przypisujsz zmienna p nie ma instancji tego obiektu w roome

Udostępnij tego posta


Odnośnik do posta
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."

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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?

Udostępnij tego posta


Odnośnik do posta
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ć.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

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)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie widzę żeby błąd który ci się wyświetla

GML
if (a=linelenght){
był w kodzie który podajesz.

Udostępnij tego posta


Odnośnik do posta
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??

 

 

 

Udostępnij tego posta


Odnośnik do posta
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.

Udostępnij tego posta


Odnośnik do posta
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?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

^

Rzeczywiscie działa w przypadku domyslnego healthbara - ale dlaczego przy kodzie ktory podalem na circle bar się nie sprawdza i pokazuje różne długości?

Udostępnij tego posta


Odnośnik do posta
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

 

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Z tego co widze w argumencie percent health powinieneś dać 100*hp/maxhp żeby działało.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Może pokaż jak wygląda GRAFICZNIE problem? Bo już chyba nie rozumiem o co biega.

Powinno być jedno koło które zmniejsza się procentowo.

Udostępnij tego posta


Odnośnik do posta
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

Udostępnij tego posta


Odnośnik do posta
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ł.

Udostępnij tego posta


Odnośnik do posta
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...

Udostępnij tego posta


Odnośnik do posta
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..

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

×