Body zdarma Java týden
Využij podzimních slev a získej od nás až 40 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

Game Maker - Health Bar

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

Vítejte u mého prvního návodu. Bude o častém problému, healthbar přes sprit.

První si namalujeme 2 obrázky. jeden pro pozadí ukazatele, a druhý pro aktuální stav zdraví. Měli by mít oba stejný tvar. Je taky důležité aby byl začátek a konec spritu přímo u okrajů, jinak by ukazatel nemusel nízké zdraví zobrazovat. Pro příklad, pozadí může vypadat takto:

a popředí, které se bude zobrazovat jenom ta část odpovídající zdraví

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Teď vytvoříme objekt, který bude vykreslovat healthbar. Do eventu Create vložíme kod

zdravi=100
maxzdravi=100

Proměnná zdravi udává zdraví na začátku, proměnná maxzdravi maximální hodnotu zdraví.

Dále vytvoříme event Draw a vložíme tento kod:

draw_sprite(sprite1,-1,x,y) //vykreslí pozadí ukazatele (sprite1)
draw_sprite_part(sprite0,-1,0,0,(sprite_get_width(sprite0)/maxzdravi)*zdravi,sprite_get_height(sprite0),x,y) //vykreslí aktuální zdraví (sprite0)

první kod vykresluje pozadí healthbaru (sprite1), druhý část zbývajícího zdraví (sprite0)

To je všechno, pro doplnění můžeme přidat do drawu tento kód:

draw_text(x-50,y+20,zdravi) //zobrazí aktuální zdraví

A zobrazí se textově hodnota aktuálního zdraví. (souřadnice x a y je si upravte podle vašich potřeb. Nakonec přikládám GMK soubor, kde najdete celý příklad


 

Stáhnout

Staženo 505x (14.22 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

 

Článek pro vás napsal Satik64
Avatar
Jak se ti líbí článek?
6 hlasů
Autor se věnuje základům game designu, programování her v Game Makeru a Unity a práci v grafických nástrojích. Občas tvoří módy do jiných her.
Předchozí článek
Game Maker - Cheatování ve hře (jak na to)
Všechny články v sekci
GameMaker - Ostatní
Miniatura
Následující článek
Práce s INI soubory v Game makeru
Aktivity (1)

 

 

Komentáře

Avatar
Fasthelp
Neregistrovaný
Avatar
Fasthelp:1.11.2011 20:11

Zdravím,
jenom radím s variable "zdravi", jak je originale - mě to fungovalo jenom zezačátku, když jsem pak restartoval game maker, psalo mi to asi 50 errorů: Uknown variable zdravi atd.
Vyřešil jsem to normálně tak, že jsem všechno "zdravi" přepsal na "health" - což je funkční variable. Nevím, třeba jsem ten skript ňák poškodil... Jenom kdyby se to někomu stalo taky...
Žádný problém..
:)

 
Odpovědět 1.11.2011 20:11
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Fasthelp
David Čápka:2.11.2011 9:12

Ano, to je možné, pokud jsi proměnnou zdravi použil v jiném objektu, který se vytvořil před objektem, kde se proměnná zdravi teprve inicializuje. Je to je ukázka, samozřejmě by se v reálu potom použila proměnná health nebo nějaká jiná.

Odpovědět 2.11.2011 9:12
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Adam Dvořák
Neregistrovaný
Avatar
Adam Dvořák:4.2.2012 14:16

Velice hezký tutoriál.
Vždycky jsem se chtěl naučit pracovat s kódem a tohle mi pohohlo...
S tou proměnnou zdravi mě to taky štvalo, a teď mám Maxhealt a Health.
Taky se mi podařilo udělat, že při stisknutí ENTER
se health o jednu dobije až po maxhealth.
Je to dobrý příklad na minutku :)
Na začátku se zobrazí okno s: "Vložte počet vteřin"
Kód to odpočítá a až bude nula zapípá to :D

PS: mám to správně?

if health<global.maxhealth //pokud bude zdraví menší než 100, přičte se
health+=1
 
Odpovědět 4.2.2012 14:16
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Adam Dvořák
David Jančík:4.2.2012 20:23

Dobrý večer,
podmínku máte správně. Dejte ji do eventu alarm a ten nastavte na rychlost místnosti (room_speed). To vám nastaví provádění kódu po vteřinách.

Odpovědět 4.2.2012 20:23
Zapomeň, že je to nemožné a udělej to ;)
Avatar
Adam Dvořák
Neregistrovaný
Avatar
Odpovídá na David Jančík
Adam Dvořák:4.2.2012 20:34

Tak jsem se snažil udělat tu minutku, ale nešlo mi to...

health=get_string("Zadej počet minut k odpočítávání:","");

Dělá to chybu, nedokáže to vzít číslo. Myslím, že správně by to mělo být

health=get_real("Zadej počet minut k odpočítávání:","");

Jenže takovou podmínku GML nezná! ;(

 
Odpovědět 4.2.2012 20:34
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Adam Dvořák
David Jančík:4.2.2012 20:39

Použijte get_integer -> načtete vteřiny a poté si můžete například takto převést na čas:
http://dl.dropbox.com/…4f76f5a1.gmk

A zde je ukázáno odpočítávání času:
http://www.itnetwork.cz/index.php?…

Odpovědět 4.2.2012 20:39
Zapomeň, že je to nemožné a udělej to ;)
Avatar
silentis13
Člen
Avatar
silentis13:4.2.2012 21:47

dobrý den chtěl bych se jen zeptat jestli by ten health bar šel dat do 3D hry? předem děkuji

 
Odpovědět 4.2.2012 21:47
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na silentis13
David Čápka:4.2.2012 21:51

Ano, šel. Jen je třeba na chvíli nastavit projekci na ortho, aby se vykreslovalo jako 2D. Je to ukázáno např. v souboru u tohoto tutoriálu: http://www.itnetwork.cz/index.php?…

Odpovědět 4.2.2012 21:51
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Adam Dvořák
Neregistrovaný
Avatar
Odpovídá na David Jančík
Adam Dvořák:4.2.2012 22:09

Vřele děkuji.

 
Odpovědět 4.2.2012 22:09
Avatar
Adam Dvořák
Neregistrovaný
Avatar
Odpovídá na David Jančík
Adam Dvořák:5.2.2012 9:02

Tak už mi ta minutka funguje.
Ale aby se mi vykreslila jako Health Bar, musel jsem si nastavit proměnnou, která udává vzdálenost toho pozadí...
Může být v eventu Create toto?:

 health=get_integer("Zadejte minuty:", 0);
global.health_start=health

Mě to funguje...;)

 
Odpovědět 5.2.2012 9:02
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na Adam Dvořák
David Jančík:5.2.2012 12:07

Proč tak složitě?
Ta proměnná je ta úplně zbytečná stačí takto:

global.health_start=get_integer("Zadejte minuty:", 0);
Odpovědět 5.2.2012 12:07
Zapomeň, že je to nemožné a udělej to ;)
Avatar
silentis13
Člen
Avatar
Odpovídá na David Čápka
silentis13:5.2.2012 19:00

děkuji za pomoc podařilo se mi to upravit doopravdy moc děkuji.:)

 
Odpovědět 5.2.2012 19:00
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Planeswalker_CZ:18.10.2012 23:58

Funguje to skvěle, mám ale menší problém, když to použiji, obrazek objektu mi zmizí, kolize a vše ostatní funguje, ale samotny objekt není vidět. Nevíte někdo, čím by to mohlo být ? :(

Odpovědět 18.10.2012 23:58
Nikdy neříkej, že to nejde, protože se naje blbec, který neví, že to nejde, a udělá to.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Adam Dvořák
David Čápka:19.10.2012 10:12

Proč je health globální? Ten život snad někomu patří, ne?

Odpovědět  -2 19.10.2012 10:12
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Planeswalker_CZ
David Čápka:19.10.2012 10:13

Ano, to se tu řeší stále, je to výchozí chování GM, viz event Draw zde: http://www.itnetwork.cz/…nts-udalosti

Odpovědět  +1 19.10.2012 10:13
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
Planeswalker_CZ:19.10.2012 17:46

Já mám jeden objekt, ale ten se v roomu má objevit vicekrat. A pro každý potřebuju zdraví, které se bude vázat jen na svuj objekt. vcetne vykresleni zdravi pod tento objekt.

Odpovědět 19.10.2012 17:46
Nikdy neříkej, že to nejde, protože se naje blbec, který neví, že to nejde, a udělá to.
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Planeswalker_CZ
TomBen:19.10.2012 17:59

Žádný problém - použiješ instance toho objektu.
Jen musíš mít zdraví jako lokální proměnnou a vyhnout se vestavěnému health.

Odpovědět 19.10.2012 17:59
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
steve2MC
Člen
Avatar
steve2MC:25.9.2013 19:42

Ahoj, super tutorial ale potřeboval bych pomoc. Potřebuji aby hp bar ubýval obraceně, zleva do prava... Pls jak to jde udělat?

 
Odpovědět 25.9.2013 19:42
Avatar
Satik64
Redaktor
Avatar
Odpovídá na steve2MC
Satik64:25.9.2013 22:11

Zdravím, napadá mě jednoduché řešení, vykreslit healthbar zrcadlově změnou proměnné image_xscale na zápornou hodnotu

draw_sprite_ext(sprite1,-1,x,y,-1,1,0,c_white,1); //vykreslí pozadí ukazatele (sprite1)
draw_sprite_part_ext(sprite0,-1,0,0,(sprite_get_width(sprite0)/100)*zdravi,sprite_get_height(sprite0),x,y,-1,1,c_white,1);
Editováno 25.9.2013 22:11
Odpovědět  +3 25.9.2013 22:11
Bůh neobdarovává lidi sny, aniž by jim nedal sílu je uskutečnit.
Avatar
steve2MC
Člen
Avatar
Odpovídá na Satik64
steve2MC:26.9.2013 9:44

Dik, funguje mi to az na to, ze mi to otoci cely sprite ale ja potrebuju jen aby ten hp bar sel obracene...

Editováno 26.9.2013 9:45
 
Odpovědět 26.9.2013 9:44
Avatar
TomBen
Redaktor
Avatar
Odpovídá na steve2MC
TomBen:26.9.2013 10:36

Při použití zrcadlového -1 scale si ty sprity předem otoč.
Vždycky mě pobaví, jak někdo zcopypastuje tutoriál a pak řekne
něco jako: "To je hezký mistře, a teď bych prosil tu Monu Lisu
ještě trochu pootočit."

Co takhle se snažit trochu sám?

Odpovědět  ±0 26.9.2013 10:36
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
steve2MC
Člen
Avatar
Odpovídá na TomBen
steve2MC:26.9.2013 16:28

Když pominu 30 min hraní si s 2 řádky kódu a další půl hodinou googlení tak máš pravdu, nesnažil jsem se. Jinak dík za nápad...

 
Odpovědět 26.9.2013 16:28
Avatar
TomBen
Redaktor
Avatar
Odpovídá na steve2MC
TomBen:26.9.2013 23:05

No, abys neřek, že jsem tě ošidil. Jde to udělat snadno
i bez úpravy spritu čistě kódem.

t=sprite_get_width(sprite0)*(1-(zdravi/100));
draw_sprite(sprite1,-1,x,y);
draw_sprite_part(sprite0,-1,t,0,sprite_get_width(sprite0)-t,sprite_get_height(sprite0),x+t,y);

Není to nijak hezký kód, ale dělá co má.

Odpovědět 26.9.2013 23:05
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Honza Šebek
Člen
Avatar
Honza Šebek:19.4.2016 20:11

Je to dobře udělané,ale mám problém to dát k objeku, aby to ubíralo když nastane kolize s hráčem.

 
Odpovědět 19.4.2016 20:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.