6. díl - TomBenova Akademie v Game Makeru: Poprvé GML

Ostatní jazyky GameMaker Základy TomBenova Akademie v Game Makeru: Poprvé GML

TomBenova akademie v GameMakeru

Poprvé GML

A už je to tady! Tentokrát si zkusíme napsat první kousek kódu. Není to vlastně nic těžkého a pokud rozumíte anglicky, jsou to velice doslovné příkazy. GML (Game Maker Language) je jazyk, který je vnitřně používán Game Makerem k popisu činnosti. Ikony, které jste si doteď zkoušeli používat, jsou jen takové hezké krabičky naplněné gml kódem a tak je i GM vidí.

Porovnání

Určitě se podívejte na taky na program přibalený v zipu. Je to přesně tentýž, který byl v minulém díle vytvořen pomocí ikon. Teď je tady přepsán do kódu gml. Objekt s původními ikonami je uvnitř ponechán nepoužitý, aby bylo možné se podívat na původní ikonové a nové gml řešení v jediném souboru.

GML obecně

Jazyk gml je možné v Game Makeru použít na různých místech:

  • první je ikona Code, která pokud se naplní nějakými příkazy, budou se tyto příkazy provádět během události, do které je ikona Code umístěna
  • skript ve složce skriptů ( Resources) umožňuje používat kus kódu pod vámi vymyšleným názvem opakovaně ( např. budete mít kód, který bude chvíli pohybovat objektem náhodně všemi směry, vložíte ho do skriptu s názvem Zatrepat, tak potom kdykoli v dalším kódu téže hry napíšete Zatrepat(), provede se celý uložený kód v aktuální situaci a s aktuálním objektem)
  • v oknech ikon tam, kde je editační řádek pro číselnou nebo textovou hodnotu ( tam napíšete jen krátké kódy, ale jinak tam jde napsat cokoli, co nakonec dává výsledek potřebného typu )
  • creation code v místnosti nebo v jednotlivých předem umístěných instancích objektů ( speciální případ použití a někdy se na to koukneme zvlášť )
  • při vytváření vlastních ikon nebo rozšíření ( i originální ikony jsou sestaveny z gml kódu )

My se v této kapitole budeme věnovat kódu napsanému do ikony Code. V ní se místo složitých nastavení skrývá skoro obyčejný textový editor. Skoro říkám proto, že tenhle zná strukturu jazyka gml a umí vybarvovat text kódu podle jeho smyslu, stejně jako upozornit na některé vaše nejběžnější a nejzřetelnější chyby.

Blok kódu gml má být uzavřen ve složených závorkách, ale zrovna pokud je náplní ikony Code jediný blok, tak Game Makeru nevadí, když tam ty závorky chybí. Obecně se dá říct, že je GM velmi benevolentní k uživateli a pokud kód alespoň trochu dává smysl, na formalitách se nebazíruje.

GML blok obsahuje příkazy ukončené středníkem nebo další bloky kódu. Nebojte se, vypadá to celkem přehledně. Koukněte třeba na následující obrázky, kde je tentýž zápis v ikonách a v gml. Je zjevné, že stačí udržet nějakou úpravnost vzhledu a smysluplnost popisek, aby se to slušně četlo.

Příkazům uvedeným v obrázku se říká přiřazení a jde o jeden z nejčastějších úkonů v gml vůbec.

Přiřazení ( hodnoty k proměnné)

Přiřazení má formu: proměnná=výraz
kde proměnná je místo v paměti počítače, kterému dáte nějaké jméno a to místo pak plníte nějakou hodnotou. Některé jazyky potřebují, aby byly proměnné pojmenovány dřív, než jsou poprvé použity ( dávání jmen proměnným se označuje jako deklarace proměnných – oznamujete, že je budete chtít použít a dáte jim jméno ). Naproti tomu Game Maker si proměnnou vytvoří prostě tehdy, když jí přiřazujete hodnotu poprvé ( prvnímu přiřazení hodnoty se říká inicializace proměnné ), takže nutně deklarovat nemusíte. Proměnná může být v GM pouze číslo nebo textový řetězec. ( textový řetězec je prostě skupinka znaků a dává se do uvozovek, aby bylo jasné, že jde o text – ‚Pepa šel do Prahy pěšky.‘ ) Slovem výraz se rozumí cokoli, co lze v konečném důsledku identifikovat jako hodnotu.

Příklad:

pocet_robotu=28;
pocet_robotu=(3*15)-5; //hvězdička znamená násobení
pocet_robotu=po­cet_robotu+20;
pocet_robotu=sqr(5); // sqr dělá druhou mocninu
a tak podobně.

Názvy proměnných se zapisují pouze pomocí písmen, číslic a podtržítka. Jiné znaky použít nesmíte.

Mnoho proměnných má Game Maker „vestavěno od výroby“. Např. mouse_x a mouse_y pro polohu kurzoru myši. Některé jsou pouze ke čtení ( např. game_id ) a do jiných můžete i zapisovat.

Proměnná, která nemůže měnit hodnotu vůbec se jmenuje konstanta. V GM jsou pouze tři:

Název Hodnota
true 1
false 0
pi 3.141..

V menu Game Makeru pod položkou Define Constants si ale můžete natvořit konstant kolik je vám libo. Můžete pak třeba používat místo true a false počeštěné pravda a nepravda. (i když anglická verze je kratší a obecně přijatá i v čechách)

Když nějakým přiřazením vytvoříte vlastní proměnnou, bude hodnota té proměnné čitelná jen v té jedné instanci, kde byla vytvořena. Říká se tomu, že instance je vlastníkem té proměnné. Když budu mít objekt zly_ninja, který bude mít dvě instance, tak každá bude mít svoji proměnnou pocet_shurikenu a u každé instance bude mít jinou hodnotu. Pokud budete potřebovat v kódu z jedné instance odkázat na jinou instanci nebo úplně jiný objekt, použijete proměnnou takto:

  • nazev_objektu­.nazev_promen­ne = ... // proměná patří určitému objektu (pro všechny instance)
  • (cislo_instan­ce).nazev_pro­menne = ... // proměnná je jen v konkrétní instanci

Číslo instance má každá instance automaticky od chvíle vytvoření a je uloženo v proměnné id. Je vidět i u objektů naklikaných do místnosti předem. Najdete to v okně místnosti, dole v řádku.

Volné samostatné procvičování

Půjde o jednoduchý koncept:

  • vstup číselné hodnoty a naplnění proměnné tou hodnotou
  • použití nějaké běžné matematické funkce
  • vypsání hodnoty proměnné po výpočtu

(vzor v zipu se jmenuje vypocet)

Potřebujete jeden prázdný libovolný objekt. V události Create si v ikoně kódu vytvoříme proměnné, které budeme chtít používat. Od té chvíle bude objekt mít tyto proměnné a my s nimi můžeme všelijak pracovat.

Např:

A = 0; B = 27; cokoli = -1;

V události Key Release ( SPACE ) si nechte zadávat hodnoty těch proměnných, které chcete, aby uživatel programu vkládal ručně. Nejsnazší je použít vestavěnou funkci get_integer().

Zapisuje se to takto:

cokoli = get_integer(„Zadej celé číslo: “, 6);

Vidíte tam název funkce a v kulatých závorkách nejprve text, který vyzve k zadání čísla a pak za čárkou, uvedete hodnotu, která je podle vás vhodným příkladem toho, co by měl uživatel zadat. Tato hodnota bude předvyplněna a uživateli stačí, aby stiskl Enter, pokud s tou hodnotou souhlasí. Často se používá místo čísla tatáž proměnná, kterou chceme měnit. Tím se jako základní (default) hodnota objeví současný obsah proměnné. Takto:

cokoli = get_integer(„Zadej celé číslo: “, cokoli);

Teď je třeba s proměnnou něco provést, když už jsme ji vytvořili a naplnili číslem. Projděte si tabulku číselných funkcí Game Makeru na http://www.itnetwork.cz/…bulka-funkci a vyberte si nějakou fuknci a udělejte s proměnnou nějaké výpočty. Můžete zakládat další proměnné, pokud je to potřeba.

Např:

absolutni_hodnota_z_cokoli =  abs( cokoli ) ;

Nakonec v události Draw ( pozor, jen a pouze tam to bude fungovat) zobrazíte obsah proměnné. Uděláte to jednoduše funkcí draw_text. Jak už je v názvu uvedeno, funkce vykreslí na obrazovku nějaký váš text. Kdo dával pozor, tak mu došlo, že my žádný text nemáme – máme číslo. To je běžná situace, která má snadné řešení. GM má funkci string(), která udělá text ze všeho, co do ní dáte.

Vzor zápisu funkce draw_text:

draw_text(x,y,‘nějaký text‘);     // vypíše text tam, kde leží instance objektu

Zápis stejné funkce s použitím pro číselnou proměnnou:

draw_text(x,y, string ( cokoli ) );  // kulaté závorky jsou povinné

Udělejte hodně pokusů s vestavěnými funkcemi a zkuste si psát jednoduché výrazy. Musí vám to přejít do krve. Pokud tady neuděláte dost vlastních pokusů, nebudete později stíhat s pochopením. V tomhle vám nepomůže ani fórum. Pokud jenom očima proletíte text článku, těžko na fóru vyplodíte rozumné dotazy na konkrétní věci a nejen, že se budete motat pořád tam co jste, ale taky vás ostatní začnou mít brzy za pitomce. Čekají vás věci mnohem těžší a proto musíte tyhle umět dočista zpaměti a bez zaváhání.

Uděláte dobře, když zkusíte mít jako zadávač hodnot jiný objekt než ten, který počítá výsledky. Procvičíte si velice běžný stav, kdy musíte určit i objekt u kterého proměnná je.

Nějak takto:

object0.cokoli = get_integer(„Zadej celé číslo: “, object0.cokoli);  //zápis v jiném objektu než object0

Hledejte hranice možností

Nedržte se příliš v mezích uvedených cvičení. Především je dobré si uvědomovat, jaké situace budou problémové. Zkuste např. zjistit nejvyšší celé číslo, které Game Maker umí zapsat do proměnné a vyzkoušejte, co se stane, když zadáte neplatný vstup, např. odmocninu ze záporné hodnoty.


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal TomBen
Avatar
-

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


 


Miniatura
Všechny články v sekci
GameMaker - základy a ikonky
Miniatura
Následující článek
Pohyb v GML část 1.

 

 

Komentáře

Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:

Ahoj chci se zeptat proč se do toho draw píše to x,y

Odpovědět 27.1.2015 20:55
Lepší být šprt než blbec :)
Avatar
Dominik Hošic
Redaktor
Avatar
Odpovídá na Tomáš Brůna
Dominik Hošic:

Jsou to koordináty nebo-li souřadnice určující pozici, kde bude prvek vykreslen. Například pokud je x i y nastaveno na 0, prvek se vykreslí v levém horním rohu.

Odpovědět 27.1.2015 22:34
Klient: Nefunguje mi internet co s tím uděláte? Operátor: a co vidíte na monitoru? Klient: No signal...
Avatar
Tomáš Brůna
Redaktor
Avatar
Tomáš Brůna:

aha a jaktože tam teď není napsáno nic to udělá co?

Odpovědět 28.1.2015 11:44
Lepší být šprt než blbec :)
Avatar
Nate_2
Člen
Avatar
Nate_2:

Matematika je moje slabá stránka .. :D Ale jinak, Fajn..

 
Odpovědět 4.7.2015 0:43
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 4 zpráv z 4.