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í.

Úvod do GML

Zdravím všechny programátory, já jsem DrMrkev. Spoustě lidem dělá problém přechod z ikon do gml. Abych řekl pravdu, ani se moc nedivím, mě samotnému to před několika lety dalo pořádně zabrat. Naneštěstí před několika lety tento článek neexistoval, takže jsem si tím musel projít sám.

Proč GML?

Přechod na GML (Game Maker Language) je velice výhodný z mnoha ohledů - například místo spousty nepřehledných ikon, které musíte otevřít, aby jste zjistili její vlastnost, máte všechno v jedné ikoně a to Code (nachází se v tabu „Control“). Do této ikony budete psát, pokud možno, přehledný kód. Ikony nejsou nic jiného, než GML kód zabalený v „krabičce s obrázkem ikony“. Jeden z uživatelů již napsal, co jednotlivé ikony obsahují, takže já to sem psát nebudu. Kromě přehlednosti je tu ještě jedna obrovská výhoda. Můžete plně využít všechny funkce. Ikon je sice docela hodně ale je to jen zlomek všech funkcí, které GML obsahuje. S přechodem na GML se vám otevřou úplně nové, úžasné možnosti.

Základy

Pokročilejší programátoři se teď možná trochu urazí, ale snažím se vysvětlit opravdu vše...

Na konci řádku (až na některé situace které vysvětlím později) vždy pište středník - říkáte tím, že tam je konec příkazu. Program totiž jednotlivé řádky nevidí. Pokud nenapíšete středník bude si program myslet že na dalším řádku pokračuje řádek předchozí, což by mohlo způsobit paseku.

Některé příkazy (jako třeba podmínky) nevyžadují středník ale tzv. blok. Ten vypadá nějak takhle :

{
}

Tyto příkazy totiž vykonávají nějakou část kódu. Tato část kódu je často víceřádková, každý řádek končí středníkem (tedy skládá se z více příkazů). Tyto řádky se dávají do bloku, aby program věděl, že k tomuto konkrétnímu příkazu náleží tento víceřádkový kód.

Většina příkazů a funkcí mají vlastnosti, které musí uživatel zadat, aby fungovaly podle očekávání. Tyto vlastnosti (také nazývané parametry nebo argumenty) se píší do kulatých závorek a vypadá to nějak takhle:

draw_set_color(make_color_rgb(120,120,8));

Jak vidíte, je možné použít i jinou funkci (přesněji její výsledek), jako vlastnost funkce. Kód v ukázce nastaví barvu vykreslování (draw_set_color) a jako parametr vezme funkci, která vytvoří novou barvu ze složek r,g,b(r=120,g­=120,b=8), neboli červené [R], zelené [G] a modré [B]. Výslednou barvu vrací jako hodnotu, se kterou se dá pracovat jako s vlastností.

Jako vlastnosti lze použít pouze funkce, které mají správný návratový typ. Jako dobrý příkaz lze použít funkci keyboard_string, která zaznamenává, které klávesy jsou postupně zmáčknuty a výsledné slovo vrací jako text. To v praxi znamená, že draw_set_color, která jako vlastnost potřebuje číslo, by s funkcí keyboard_string, která vrací text vyhodila chybu.

Podmínky

Řekněme, že máme obchod. Pokud hráč klikne na předmět, tak ho koupí. Máme tu problém - co když hráč nemá dost peněz? Koupí ho i tak? To se řeší tzv. větvením - to znamená, že chod programu měníme v závislosti na situaci. Větvení se provádí tzv. podmínkami, do kterých spadají klíčová slova IF() a ELSE.

pozn. za podmínkami středník nepište, jen blok

IF (česky „když“) je jedno z nejpoužívanějších slov. Jako vlastnost vezme, co má platit, aby se kód v bloku provedl. Na to navazuje klíčové slovo ELSE, které se vykoná, když podmínka IF není splněna.

V pseudokódu by to mohlo vypadat takhle:

if(hráč má dost peněz)
{
    koupí předmět;
    odečte hráčovy peníze;
}
else
{
    zobrazit okno;
    napsat do okna("Nemáš dost peněz !");
}

Podmínky je také možné vkládat do sebe. Řekněme, že hráč může dostat ocenění „První obchod“. Ocenění je možné dostat jen, když ho ještě nemáte. Opět použiji pseudokód pro následující příklad :

if(hráč má dost peněz)
{
    koupí předmět;
    odečte hráčovy peníze;
        if(hráč nemá ocenění "První obchod")
        {
            hráč obdrží ocenění "První obchod";
        }
}
else
{
    zobrazit okno;
    napsat do okna("Nemáš dost peněz !");
}

Také můžeme dát více podmínek do jednoho IF, používají se k tomu tzv. logické operátory. Operátory jsou jeden či dva znaky, které mají hlubší význam, než na jaký na první pohled vypadají.

  • &&[ctrl + alt + c] : tento operátor značí „logické A“. Může být využit, pokud chcete, aby se blok podmínky provedl jen pokud jsou splněny oba požadavky.
if (hráč má dost peněz && má dost místa v inventáři)
  • ||[ctrl + alt + w] : tento operátor značí „logické NEBO“. Může být využit, pokud chcete provést blok za jednoho nebo druhého případu.
If (hráč má dost peněz || má něco hezkého na výměnu)

Tyto operátory sloužily k rozšiřování podmínek, ale jsou tu ještě jedny operátory. Tyto operátory nezíváme relační a slouží k porovnávání hodnot:

je rovno ==
není rovno !=
je větší >
je menší <
je větší nebo rovno >=
je menší nebo rovno <=

Náš příklad by za použití relačních operátorů vypadal takto:

if(hráčovy peníze >= potřebné peníze && (maximální místo v inventáři - použité místo v inventáři) >= potřebné místo)

Když vynecháme pseudokód:

if (oPlayer.money >= itemCost && (InvCap - InvUsed) >= invNeed)

Závorky

Je dobré vědět, kdy a jak použít závorky. Nesprávné použití závorek může vést k velmi nehezkým bugům (kód funguje, ale jinak, než byste čekali).

Řekněme, že potřebujeme porovnat volné místo s potřebným.

kapacita - použito >= potřebné

Takto to ale nebude fungovat. Kapacita – použito se sice vypočítá, ale s potřebným se porovná pouze použito. Je tomu tak proto, že relační operátory mají přednost před aritmetickými operacemi (například mínus). Pomocí závorek můžeme ručně určit pořadí operací (podobně jako v matematice).

Funkční kód by vypadal takto:

(kapacita - použito) >= potřebné

Takto se nejprve provede odečítání a až pak porovnání výsledku s potřebné.

příklad možností které GML oproti ikonám nabízejí

  • možnost využít 3D zvuk
  • můžete využívat fyziku (Box2D engine)
  • můžete pracovat s surface(tím se dají udělat třeba světla v temnotě)
  • můžete ve svých hrách použít .DLL knihovny(velice užitečná věc, dll knihovny umí vše co GML neumí)
  • můžete použít pokročilé možnosti kontroly kolize(např. v přímce, v okruhu, kontrolovat uřčité místo apod.)
  • můžete dělat 3D hry(ovšem většinou poměrně chabé a ze začátku jen jednopatrové ve stylu Wolfenstein 3D)

pozn. Tento seznam je velice stručný, možností je mnohem více, ovšem kdybych sem napsal všechny článek by neměl konce(díky dll knihovnám doslova).

To by bylo vše, doufám, že jsem vám přechod na GML aspoň trochu usnadnil.


 

Všechny články v sekci
GameMaker - GML
Článek pro vás napsal Garrom Orc Shaman
Avatar
Uživatelské hodnocení:
3 hlasů
Autor zabýval pasní her v nástroji GameMaker, poté Unity3D a teď se zabývá GoDot enginem. Dokud tu někde nebude kategorie "GoDot", autor nejspíše psát nebude.
Aktivity