Unitable - interaktivní runtime tabulkový systém pro GM 8.x

Ostatní jazyky GameMaker GML Unitable - interaktivní runtime tabulkový systém pro GM 8.x

Tohle možná nevypadá jako světový trhák, ale kdo někdy zkusil vytvořit v Game Makeru nějakou interaktivní tabulku, jistě zjistil, že to není tak snadné, jak to vypadá. Obvykle se to řeší spoustou předvyrobených obrázků - sprites, samostatným objektem pro každou hloupost a GM se vám brzy zaplní do nepřehledna.

Moje tabulka je jediný objekt, který ale dokáže rozlišit položku, na kterou je kliknuto a snadno podle toho určit činnost, která se má provádět. Může mít jako grafický podklad nějaký sprite, ale není to nutně potřeba. Objekt tabulky má povinně zaplněny jen události Create, Draw a uživatelské eventy. V Create je kompletní nastavení, v Draw se vše vykresluje a v uživatelských eventech je logika.

Pro úspěšné používání není třeba zvláštních znalostí. Stačí rozumět ikonkám, umět používat události a je velice dobré (i když ne vysloveně nutné) umět taky principy dědičnosti mezi objekty. Budete-li chtít dělat v systému vlastní úpravy chování (to se netýká jednoduché změny dat v tabulce nebo nastavení velikosti), změny logiky nebo nějaké optimalizace či automatické kontroly, je více než vhodné umět kompletní práci s GML, zejména vlastnosti proměnných, funkce, vykreslování a práci s daty.

Použití

Můžete použít přímo objekt unitable z ukázky (přiložen je i soubor pro import resources) a vyplnit údaje ve dvou blocích eventu Create a máte jednu tabulku. Pokud jich chcete víc, lze zakládat prázdné objekty, unitable jim nastavit jako parent a opět u nich měnit jen obsah eventu Create. Pokud budete chtít, aby tabulka reagovala na kliknutí, tabulka počítá neustále proměnné IndexPolozky, IndexMista, SouradniceX, SouradniceY. IndexPolozky je číslo položky, nad kterou je zrovna myš. -1 znamená, že je myš mimo. IndexMista je číslo řádku tabulky a Souradnice jsou středy tabulkových políček. Takže chceme-li ošetřit kliknutí např. na třetí položku, stačí v eventu MouseLeftRelease přidat podmínku testující IndexPolozky==3. Názvem proměnné Polozka je vždy míněna položka v databázi, slovem Misto je vždy označena poloha řádku v tabulce směrem odshora dolů. V přiložené ukázce si můžete zkusit pomocí sousedního objektu Ovladač (který je jednoduše odvozen od stejného základního objektu unitable) měnit nastavení první tabulky. Změnou proměnné OdPolozky se začnou vypisovat jiná data, zatímco změnou proměnné OdMista se stejná data vypisují jinam v tabulce. Vyzkoušejte si to v ukázce, je to jednoduché a celkem intuitivní. Pokud budete mít v objektu připraveno více dat, lze se ve výpisu posouvat jen změnou proměnné OdPolozky. Takže si můžete vytvořit nějaký druh posuvného seznamu.

Vlastní úpravy

Za běhu programu lze snadno měnit počet položek tabulky, obsah dat, polohu vykreslení v rámci tabulky, rámečky a podobně. V ukázce si můžete vyzkoušet, jak je obslouženo najetí myši na konkrétní položku, kliknutí levou myší na položku, pravou myší na zápatí a záhlaví. Objekt tabulky si svoje data nese s sebou a jsou uspořádána v menším poli definovaném v Create. Buď můžete vyplnit vlastní data ručně nebo můžete připsat nějaké vlastní načítání dat např. ze souboru, z datové struktury nebo z jiného objektu. Data nejsou tabulkou nijak kontrolována a pokud chcete zajistit správnost vyplnění (např. jen čísla nebo jen text o určité délce), musíte si kontrolu zajistit nejlépe právě v eventu Create, kde se data tvoří.

Pokud chcete měnit velikosti čehokoliv (např. rámečky nebo písmo), předpokládá se, že to budete dělat v designové části tvorby, ale teoreticky by to šlo i za běhu programu. Všechny měnitelné velikosti jsou v druhém kódovém bloku eventu Create, kromě písma. Písmo se změní tradičně v resources->fonts a pak musíte patřičně upravit velikosti rámečků, pokud je to vzhledem k rozměrům nutné.

Budete-li používat tabulku zcela bez sprite, používejte pro zjištění kliknutí myši funkce z kategorie mouse_check... a kontrolujte myš během události Step místo původní události MouseLeftReleased, kterou dělá GM a která je závislá na sprite.

Jednotlivé eventy UserDefined jsou důkladně okomentovány, takže není problém najít tu část logiky, která dělá konkrétní věc. Pokud umíte GML dobře, můžete přepsat např. zvýrazňování textu při najetí myši a nahradit ho třeba částicovým efektem. Stejně tak lze tady změnit způsob vykreslení rámečků, stíny písma, průhlednosti atd.

Pokud necháte v eventu Draw původní obsah, můžete beztrestně připsat další vykreslování, takže můžete mít tabulku doplněnou tématickými obrázky. Tabulce nevadí jakákoli průhlednost podkladového sprite a můžete celkem snadno obrázkový podklad animovat. Neměl by být velký problém přidat položkám tabulky tlačítkový efekt, i když primárně to k tomu určeno není. Doporučuji v takovém případě překreslovat přes vršky tabulkových položek průhledný sprite s efektem Buttonize do bílé barvy.

Pokud změníte fonty, nepřežeňte to s velikostí nebo přidejte kontrolu přetečení rámečků textem pomocí string_width a string_height.

Samozřejmě lze hýbat celou tabulkou libovolně jako s každým jiným objektem, protože souřadnice všeho jsou relativní vzhledem k x,y objektu tabulky. Pokud se budou okna překrývat, přidejte do všech ošetření myšokliků také test na konkrétní menu, jinak bude možné skrz jedno menu kliknout zároveň i na jiné. Schválně si zkuste do objektu seznam v ukázce přidat horizontální pohyb rychlostí 1 a uvidíte, jak se to chová. Jinak by s překrýváním neměl být žádný problém. Taky je jistě možné kombinovat toto menu s drag&drop systémy. Pokud bude zájem o nějaké takové použití, pište do komentáře pod článkem co s tím chcete dělat a já vám s tím můžu poradit.

Všechno umím, co dál?

Pokud chcete menu animovaně vysouvat, rozbalovat a podobně, doporučuji celé vykreslování nejprve vysypat do surface a pak s ním můžete cvičit jakkoliv. Vzhledem k tomu, že celé Draw je strukturováno z uživatelských eventů, bude přesměrování do surface poměrně snadné. Teoreticky lze na tomto systému postavit i velký okenní manažer s řadou funkcí. S okny operačního systému s pokročilou grafickou nadstavbou to sice srovnatelné nebude ani zdaleka, ale v okamžiku, kdy se při vývoji svého programu nebo hry soustředíte na vlastní složité vnitřní mechanismy, může takovýto předvyrobený tabulkovač s dostatečnou účinností a elegancí zastat potřebnou práci minimálně do doby, než najdete čas vyrobit vlastní a lepší.


 

Stáhnout

Staženo 187x (1.42 MB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

  Aktivity (1)

Článek pro vás napsal TomBen
Avatar
-

Jak se ti líbí článek?
Celkem (2 hlasů) :
55555


 


Miniatura
Všechny články v sekci
GameMaker - GML

 

 

Komentáře

Avatar
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Zdeněk Pavlátka:

Super věcička. :D Asi před dvěma měsíci jsem na jedné tabulce pracoval, Asi po dvou hodinách vymýšlení uměla zobrazit libovolný počet položek s obrázky nalevo od textu.

Odpovědět 9.12.2013 16:09
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
TomBen:

Kdyby bylo takových věcí víc, byl by GM řádově použitelnější.
Všude je plno kdejakých blbostí ke skákacím plošinovkám, ale
když člověk potřebuje nějaké normální ovládací prvky, tak se
musí sedřít z kůže sám. Třeba jen posuvníky na kraji herního
okna, aby se dalo rolovat s mapou - to se člověk osype, než
to v gml napíše, aby to nějak běhalo. :-)

Odpovědět  +1 9.12.2013 17:56
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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na TomBen
Zdeněk Pavlátka:

Mám téměř dokončený hudební přehrávač používající DLL z yoyogames. udělat grafickou část se seznamem písniček byl horor.

Odpovědět 9.12.2013 18:03
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
TomBen:

Dáš to pak sem?
Docela bych se kouknul, jak se ti to povedlo.

Odpovědět 9.12.2013 20: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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na TomBen
Zdeněk Pavlátka:

Skoro jsem ho dokončil, ale pak přestal GM 8 fungovat a já byl línej to předělávat do GM Studia. Ale časem to sem určitě dám.

Odpovědět 10.12.2013 15:58
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Zdeněk Pavlátka
TomBen:

Když mi to pošleš, třeba se v tom vyznám a dokončím to. :-)
Co ty na to?

Odpovědět 10.12.2013 18:01
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
Zdeněk Pavlátka
Tým ITnetwork
Avatar
Odpovídá na TomBen
Zdeněk Pavlátka:

Chybí jen odstranit chyby :D To už snad zvládnu. Když to do GM Studia dát nepůjde, pošlu ti to.

Odpovědět  +1 10.12.2013 18:14
Kolik jazyků umíš, tolikrát jsi programátor.
Avatar
Neaktivní uživatel:

Hezky uděláno, ovšem pokud je zadáno "Do položky" >18
(například vstup 19 vykreslí číslo 1 dole v tabulce)
Pole se nezmenší a nevykreslí další prvky, stejný problém je i na opačné straně, kde ovšem není tak výrazný. Problém by řešilo nezadat velikost pole napevno, ale počítat ji podle počtu polí.

Jinak skvělá práce, mě se to velmi líbí. :)

Odpovědět 28.4.2014 15:25
Neaktivní uživatelský účet
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 8 zpráv z 8.