Úvod do GML

Ostatní jazyky GameMaker GML Ú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.


 

  Aktivity (5)

Článek pro vás napsal Garrom Orc Shaman
Avatar
Autor se několik let zabýval tvorbě videoher v nástroji GameMaker. Poslední dobou se intenzivně učí používat Unity3D za použití jazyku C#..inu má se ještě hodně co učit.

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


 


Miniatura
Všechny články v sekci
GameMaker - GML
Miniatura
Následující článek
BlowWind Benchmark

 

 

Komentáře
Zobrazit starší komentáře (4)

Avatar
Ondřej Jiří Beneš:

Když na to tak koukám, celkově jsou prohozená znaménka větší a menší, viz příspěvky výše.

 
Odpovědět 23. června 22:27
Avatar
David Novák
Tým ITnetwork
Avatar
David Novák:

Díky za upozornění.. Chyb tam bylo jak maku a očividně jsem je neodchytil všechny :)

Odpovědět 23. června 22:48
Chyba je mezi klávesnicí a židlí.
Avatar
Garrom Orc Shaman:

Za velký počet chyb se omlouvám, pokusím se to v dalších článcích omezit.
Jak je zmíněno výše pořadí akcí není určeno interně ale je určeno programátorem správným použitím kulatých závorek.

Odpovědět 24. června 14:54
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
janjuracka861:

Čauky, hele nejsem si tím úplně jistý ( v GM jsem nedělal už tak 3 roky ), ale řekl bych že ';' není na konci příkazu potřeba. Samozřejmě v ostatních jazycích je nutnost a je dobré si na to zvyknout. Jen v GM si nepamatuji že bych tu klávesu použil, nicméně je to jen můj výtažek z minulosti a klidně to nemusí být pravda :)

 
Odpovědět 3. července 20:50
Avatar
Odpovídá na janjuracka861
Garrom Orc Shaman:

Pravda to je i není, do GM 8.1 to nebylo třeba, ovšem kód nemusel fungovat korektně, od GM:S (Game Maker : Studio) na to tuším upozorní jako varování ale ne chybu..... abych řekl pravdu už si moc nepamatuji co se stane v GM:S když zapomenu středník. Jeden čas jsem zkoušel C# a díky této zkušenosti jsem si psaní středníků zcela zautomatizoval.... upřímně GML ti dá velice dobrý start a naučí tě základní gramatiku a protože GML je C-like jazyk je dobré po čase přejít na C# nebo C++. GML je sice docela efektivní a především jednoduchý ale když to bude jediné co budeš umět tak tě v programování nikde nevemou. upřímně se teď také učím C#, články do GML píši proto abych si vydělal body na články do C#..... ovšem to není jediný úmysl, těch je o něco výce.

Odpovědět 3. července 21:02
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Garrom Orc Shaman:

"odečte hráčovy peníze" není myšleno jako "odečte hráčovi peníze(jemu odečte peníze)" ale jako "odečte hráčovy peníze (odečte jeho peníze)" tudíž tam patří "y".

Odpovědět 3. července 21:10
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Odpovídá na Garrom Orc Shaman
janjuracka861:

Tak to je dobrý vědět :) Ještě ti mohu dát radu. Když smolíš delší příspěvky tak si to nech checknout wordem, opraví ti chyby a ty si pak nebudeš připadat jak blbec :) [poslední slovo tvého příspěvku :)]

 
Odpovědět 4. července 7:51
Avatar
Odpovídá na janjuracka861
Garrom Orc Shaman:

mám v opeře nainstalovaný český slovník (podtrhávání nesprávných slov)... asi máš na mysli "Výce" .. ano uznávám že to je ošklivý překlep, občas se stane že odešlu zprávu a potom ji chi zkontrolovat (správně by to mělo být naopak) což se stává když něco dělám a přemýšlím o něčem úplně jiném.

Odpovědět 4. července 21:28
We're orcs, maybe we are not always wise or beautiful, but we will always be strong, outnumbered and well armed
Avatar
Šimon Raichl
Redaktor
Avatar
Šimon Raichl:

Některé příkazy (jako třeba podmínky) nevyžadují středník ale tzv. blok.

Nechci rejpat, ale to není pravda. Když v GML píšeš podmínku, tak svorky psát nemusíš.

 
Odpovědět 11. července 17:51
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 10 zpráv z 14. Zobrazit vše