Kontrolky CTRL ALT SHIFT

Vlastně taková maličkost.
Jde o vizuální kontrolu stavu kláves CTRL, SHIFT, ALT.

Může se to hodit, pokud ve hře chcete používat mnoho featur ukrytých pod tyto modifikační klávesy. Jinak je to především příklad práce v GML.

Začněte tím, že stáhnete Kontrolky z Code Garage.

Nejprve si pusťte Kontrolky.exe, ať vidíte, jak funguje výsledek.

Teď si do GMS naimportujte Kontrolky.gmz a koukněte se, jak jsem to udělal. Přestože je výsledek poměrně banální záležitost, myslím, že způsob návrhu může být poučný i pro zkušené uživatele Game Makeru.

Předně jsem použil svoji standardní sadu skriptů Essentials, která je zdarma ke stažení v mojí Code Garage a můžete ji používat v licenci CreativeCommons BY.
( bližší info: http://creativecommons.org/licenses/ )
Moje skripty Essentials vznikly postupně podle potřeb při vývoji her, tak šetří dost práce a už jsem líný programovat něco bez nich.  Nicméně je klidně můžete nahradit svými řešeními.

Po otevření projektu je vidět několik objektů, fonty a zmíněné skripty. Všimněte si způsobu pojmenovávání fontů. Jako FF dávám střední velikost, FFB (FF big) větší, FFS menší případně FFG (great) bombasticky velký. Dobře se to pamatuje a napovídač při psaní kódu po napsání FF další písmena snadno doplní. Ve velkých projektech se vyplatí používat před objektem obj_, před spritem s_ a tak podobně, aby šlo napsat obj_nepritel a s_nepritel a bylo hned jasné o co jde. Pokud  je projekt menší ( na počet resources ), je to zbytečné a jen to přidává psaní.

Teď bych se měl zmínit o globálních proměnných. Pokud se snažíte programovat objektově ( způsob myšlení při programování , který zvyšuje znovupoužitelnost kódu ), měli byste být s globálními proměnnými opatrní, protože k použití globálních proměnných člověka láká především neochota myslet. Každopádně používejte jen tolik globálních proměnných, kolik udržíte najednou v hlavě. Tzn. pokud v kódu musíte hledat, abyste našli, kde se mění obsah nějaké globální proměnné, tak jich máte moc. Pokud globální proměnné mám, tak je zakládám v objektu sys_Globals a píšu je velkými písmeny. De facto by šly všechny nahradit zápisem sys_Globals.nazev_promenne, ale to bych si upsal prsty. Správné použití globálních proměnných nemění podstatu kódu, ale pouze snižuje počet písmen nutných k napsání názvů. Je asi jasné, že sys_Globals musí být první objekt v místnosti ( Instance Order ) a také musí být persistent.

Další zajímavý objekt je escaper. Někdy ho mám pojmenovaný sys_Escaper. A obvykle ho neprogramuji, ale jen kopíruji z projektu do projektu. Je velice efektivní mít běžné objekty uloženy ve složce jako .gmx a prostě je jen hodit do okna Game Makeru. Já si takové objekty skladuji v Code Garage. Klidně si je zkopírujte. Escaper samozřejmě dělá to, co má v názvu. Způsobuje ukončení po stisku Esc a restart místnosti po stisku ‚R‘. Občas ho nějak upravím, ale obykle Escaper prostě potřebuji v této podobě.

Další objekt se jmenuje label a ušetří obrovský kus práce. Vyrobíte s ním jakýkoliv statický nápis ve hře. Prostě jeho instance pokládáte do místnosti a v creation_code měníte jen nastavení. Tento způsob je vysoce efektivní.

Příklad nastavení:

///properties

caption=“;                        //text nápisu

align=5;                           //zarovnání jako na Numpadu … 5 střed, 1 vlevo dole atd.

color=c_silver;                 //barva nápisu

alpha=1;                         //průhlednost

font=FFB;                       //font

 

A teď se dostáváme k samotným kontrolkám. Využívám globální proměnné definované v sys_Globals a to CTRL, SHIFT, ALT. Nabývají hodnot true a false podle stavu klávesnice. Jejich správnou funkčnost zajišťuje samotný objekt sys_Globals v eventu BeginStep. Je to velice výhodné, protože kdekoli v kódu hry můžete použít zápis

if CTRL { moje akce }

který se provede jen při stisknutém CTRL.
Podobně se kód

if !CTRL && !SHIFT && !ALT {  moje akce  }

provede jen tehdy, když není stisknuta žádná z modifiakčních kláves.
Centralizace kontroly kláves pomocí globálních proměnných má tu výhodu, že faktická kontrola stavu klávesnice probíhá maximálně jednou za Step. Čili je to výhodné tehdy, když chcete klávesy CTRL, SHIFT, ALT kontrolovat v hře na mnoha místech. Pokud jen jednou, stačí vám funkce keyboard_check_direct().

Vykreslení kontrolky je bezspritové a používá skript draw_ball(x,y,color) ze sady Essentials. Jistě lze nahradit pomocí sprite nebo nějakým jiným vykreslením. Do draw eventu by šlo také připsat vykreslení názvu místo použití objektu label. Takhle to ale má tu výhodu, že mohu nápisy kdykoli snadno přesunout v místnosti, pokud například změním grafiku pozadí. Takže nemusím lézt do kódu kvůli změně souřadnic.

Ještě malá inspirace:
Pokud použijete moji DLL z projektu Clicker
http://kreveta.net/clicker/
můžete vyrobit něco jako widget. Malé plovoucí okno stále nahoře nad ostatními okny, ukazující stav modifikačních kláves se může docela hodit.

No, myslím, že jsem se vypsal dost a pokud budou nějaké dotazy, tak stačí napsat.

TomBen