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
Chell

Temat zbiorczy na drobnostki

Pytanie

Chell    26

masz pytanie, które nie zasługuje na własny temat i chcesz je zadać w shoutboxie? nie rób tego! tam utonie! spytaj tutaj. :-)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

765 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

  • 0
Dester    0

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
  • 0
Ignatus    13

To dlaczego w każdym innym miejscu mogę to zrobić tylko nie przy draw_line ?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach
  • 0
ediepl    4
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
  • 0
Ignatus    13

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
  • 0
Phoenix    0

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
  • 0
Threef    17
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
  • 0
Ignatus    13

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
  • 0
Threef    17

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
  • 0
Ignatus    13

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
  • 0
I am vader    25

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
  • 0
Ignatus    13

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
  • 0
Ignatus    13

^

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
  • 0
I am vader    25

Jak ten circle bar wyglada? To nie pojedyncze kolo ktorego 360 stopni to 100% HP?

Udostępnij tego posta


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

 

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
  • 0
I am vader    25

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
  • 0
I am vader    25

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
  • 0
Ignatus    13

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
  • 0
I am vader    25

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
  • 0
Ignatus    13

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
  • 0
I am vader    25

U mnie działa™

Więc musiałeś coś źle podać w argumentach.

Udostępnij tego posta


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

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
  • 0
I am vader    25

Skończyly mi się pomysły... Może masz jakiś kod który zmienia hp i/lub maxhp?

Udostępnij tego posta


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

Wielkie dzięki Vader.Dzięki Twojemu przykładowi zrobiłem dogłębne śledztwo i znalazłem błąd.Parent ustawiał hp i dany obiekt też

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

×