Pouze tento týden sleva až 80 % na e-learning týkající se C# .NET. Zároveň využij akce až 50 % zdarma při nákupu e-learningu. 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 - interaktívny runtime tabuľkový systém pre GM 8.x

Toto možno nevyzerá ako svetový trhák, ale kto niekedy skúsil vytvoriť v Game Makeru nejakú interaktívnu tabuľku, určite zistil, že to nie je tak jednoduché, ako to vyzerá. Zvyčajne sa to rieši množstvom predvyrobených obrázkov - sprites, samostatným objektom pre každú hlúposť a GM sa vám čoskoro zaplní do neprehľadná.

Moja tabuľka je jediný objekt, ktorý ale dokáže rozlíšiť položku, na ktorú je kliknuté a ľahko podľa toho určiť činnosť, ktorá sa má vykonávať. Môže mať ako grafický podklad nejaký sprite, ale nie je to nutne potrebné. Objekt tabuľky má povinne zaplnené len udalosti Create, Draw a užívateľské eventy. V Create je kompletné nastavenie, v Draw sa všetko vykresľuje a v užívateľských eventoch je logika.

Pre úspešné používanie nie je potrebné zvláštnych znalostí. Stačí rozumieť ikonkám, vedieť používať udalosti a je veľmi dobré (aj keď nie vyslovene nutné) vedieť taky princípy dedičnosti medzi objektmi. Ak budete chcieť robiť v systéme vlastné úpravy správanie (to sa netýka jednoduché zmeny dát v tabuľke alebo nastavenie veľkosti), zmeny logiky alebo nejaké optimalizácie či automatickej kontroly, je viac než vhodné vedieť kompletnú prácu s GML, najmä vlastnosti premenných, funkcie, vykresľovanie a prácu s dátami.

Použitie

Môžete použiť priamo objekt unitable z ukážky (priložený je aj súbor pre import resources) a vyplniť údaje v dvoch blokoch eventu Create a máte jednu tabuľku. Ak ich chcete viac, možno zakladať prázdne objekty, unitable im nastaviť ako parent a opäť u nich meniť len obsah eventu Create. Ak budete chcieť, aby tabuľka reagovala na kliknutie, tabuľka počíta neustále premenné IndexPolozky, IndexMista, SouradniceX, SouradniceY. IndexPolozky je číslo položky, nad ktorou je práve myš. -1 znamená, že je myš mimo. IndexMista je číslo riadku tabuľky a súradnice sú stredy tabuľkových políčok. Takže ak chceme ošetriť kliknutie napr. Na tretiu položku, stačí v evente MouseLeftRelease pridať podmienku testujúci IndexPolozky == 3. Názvom premenné Polozka je vždy mienená položka v databáze, slovom Misto je vždy označená poloha riadku v tabuľke smerom zhora nadol. V priloženej ukážke si môžete skúsiť pomocou susedného objektu Ovládač (ktorý je jednoducho odvodený od rovnakého základného objektu unitable) meniť nastavenie prvej tabuľky. Zmenou premennej OdPolozky sa začnú vypisovať iné dáta, zatiaľ čo zmenou premenné OdMista sa rovnaké dáta vypisujú inam v tabuľke. Vyskúšajte si to v ukážke, je to jednoduché a celkom intuitívne. Ak budete mať v objekte pripravených viac dát, možno sa vo výpise posúvať len zmenou premenné OdPolozky. Takže si môžete vytvoriť nejaký druh posuvného zoznamu.

Vlastné úpravy

Za behu programu možno ľahko meniť počet položiek tabuľky, obsah dát, polohu vykreslenie v rámci tabuľky, rámčeky a podobne. V ukážke si môžete vyskúšať, ako je obslúžených nabehnutí myši na konkrétnu položku, kliknutie ľavú myšou na položku, pravú myšou na päty a hlavičky. Objekt tabuľky si svoje dáta nesie so sebou a sú usporiadané v menšom poli definovanom v Create. Buď môžete vyplniť vlastné dáta ručne alebo môžete pripísať nejaké vlastné načítanie dát napr. Zo súboru, z dátovej štruktúry alebo z iného objektu. Dáta nie sú tabuľkou nijako kontrolované a ak chcete zaistiť správnosť vyplnenia (napr. Len čísla alebo len text o určitej dĺžke), musíte si kontrolu zaistiť najlepšie práve v evente Create, kde sa dáta tvoria.

Pokiaľ chcete meniť veľkosti čohokoľvek (napr. Rámčeky alebo písmo), predpokladá sa, že to budete robiť v dizajnovej časti tvorby, ale teoreticky by to išlo aj za behu programu. Všetky meniteľné veľkosti sú v druhom kódovom bloku eventu Create, okrem písma. Písmo sa zmení tradične v resources-> fonts a potom musíte patrične upraviť veľkosti rámčekov, ak je to vzhľadom k rozmerom nutné.

Ak budete používať tabuľku úplne bez sprite, používajte pre zistenie kliknutia myši funkcie z kategórie mouse_check ... a kontrolujte myš počas udalosti Step miesto pôvodnej udalosti MouseLeftReleased, ktorú robí GM a ktorá je závislá na sprite.

Jednotlivé eventy UserDefined sú dôkladne posudzované, takže nie je problém nájsť tú časť logiky, ktorá robí konkrétnu vec. Ak viete GML dobre, môžete prepísať napr. Zvýrazňovanie textu pri nabehnutí myši a nahradiť ho treba časticovým efektom. Rovnako tak možno tu zmeniť spôsob vykreslenie rámčekov, tiene písma, transparentnosti atď.

Ak necháte v evente Draw pôvodný obsah, môžete beztrestne pripísať ďalšie vykresľovanie, takže môžete mať tabuľku doplnenú tematickými obrázky. Tabuľke nevadí akákoľvek transparentnosť podkladového sprite a môžete celkom ľahko obrázkový podklad animovať. Nemal by byť veľký problém pridať položkám tabuľky tlačidlový efekt, aj keď primárne to k tomu určené nie je. Odporúčam v takom prípade prekresľovať cez vŕšky tabuľkových položiek priehľadný sprite s efektom Buttonize do bielej farby.

Ak zmeníte fonty, neprežeňte to s veľkosťou alebo pridajte kontrolu pretečeniu rámčekov textom pomocou string_width a string_height.

Samozrejme možno hýbať celou tabuľkou ľubovoľne ako s každým iným objektom, pretože súradnice všetkého sú relatívne vzhľadom kx, y objektu tabuľky. Ak sa budú okná prekrývať, pridajte do všetkých ošetrenie myšokliků tiež test na konkrétne menu, inak bude možné skrz jedno menu kliknúť zároveň aj na iné. Schválne si skúste do objektu zoznam v ukážke pridať horizontálny pohyb rýchlosťou 1 a uvidíte, ako sa to chová. Inak by s prekrývaním nemal byť žiadny problém. Taky je určite možné kombinovať toto menu s drag & drop systémy. Pokiaľ bude záujem o nejaké takéto použitie, píšte do komentára pod článkom čo s tým chcete robiť a ja vám s tým môžem poradiť.

Všetko viem, čo ďalej?

Pokiaľ chcete menu animovane vysúvať, rozbaľovať a podobne, odporúčam celé vykresľovanie najprv vysypať do surface a potom s ním môžete cvičiť akokoľvek. Vzhľadom k tomu, že celé Draw je štruktúrované z užívateľských eventov, bude presmerovanie do surface pomerne jednoduché. Teoreticky je možné na tomto systéme postaviť aj veľký okenný manažér s radom funkcií. S oknami operačného systému s pokročilou grafickou nadstavbou to síce porovnateľné nebude ani zďaleka, ale v okamihu, keď sa pri vývoji svojho programu alebo hry sústredíte na vlastné zložité vnútorné mechanizmy, môže takýto Predvyrobené tabulkovač s dostatočnou účinnosťou a eleganciou zastať potrebnú prácu minimálne do doby, než nájdete čas vyrobiť vlastné a lepší.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 201x (1.42 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Všetky články v sekcii
Game maker - GML
Článok pre vás napísal TomBen
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
-
Aktivity