Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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žením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Všechny články v sekci
GameMaker - GML
Článek pro vás napsal TomBen
Avatar
Uživatelské hodnocení:
2 hlasů
-
Aktivity