Game Maker Language

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání
Game Maker Language
Vývojář Yoyogames
Aktuální verze 8.1 (2011)
Operační systém Windows,Mac,Linux,IPad,Android,IPhone
Typ softwaru Programovací jazyk
Licence Shareware
Web http://yoyogames.com

Game maker language (GML) je skriptovací programovací jazyk, který je použit ve vývojovém prostředí Game Maker. Toto IDE se stará i o překlad do spustitelného souboru. Má syntaxi podobnou C s možností použití i syntaxe Pascalu. Vytvořil jej Mark Overmars.

Syntaxe a sémantika GML[editovat | editovat zdroj]

GML kód je strukturovaný podobně jako kód jazyku C. Řádky kódu mohou být ukončeny středníkem, ale není to vyžadováno.

GML používá mnoho operátorů známých z C jako například: +=, -=, *=, /= nebo ?:.

Funkce[editovat | editovat zdroj]

Game Maker obsahuje knihovnu vestavěných funkcí. Programátor též může vytvořit skripty, které lze volat stejně jako funkce. Kreslící funkce využívají Direct3D API.

GM má též vestavěné funkce pro volání externích DLL. Tedy, mnoho funkcionality, která není přístupná skrze GML, tedy může být přidána skrze DLL.

Proměnné[editovat | editovat zdroj]

Stejně jako v mnoha jiných skriptovacích jazycích není v GML nutno proměnné deklarovat. Proměnná je vytvořena tehdy, když je nastavena na nějakou hodnotu. Avšak proměnné se dají i deklarovat pomocí klíčových slov var a globalvar. Pro práci s globálními uživatelem definovanými proměnnými se dá použít prefix global (například global.lokace=5). Obdobně pro přístup k členským proměnným se používá jako prefix jméno instance.

Uživatelem definované proměnné mohou být lokální a globální, při čemž lokální je defaultní. Existují také předefinované proměnné a konstanty. Každá instance objektu v programu má množinu vestavěných lokálních členských proměnných jako například "x" a "y". Dále existují globální vestavěné funkce jako "score".

Datové struktury[editovat | editovat zdroj]

Je možno deklarovat i pole a jiné datové struktury.

Pole (array) mohou mít jeden či dva rozměry a mohou obsahovat libovolnou kombinaci řetězců (string) a reálných čísel (real). Nemohou být ani parametry, ani návratovými hodnotami funkcí. Limity na velikost pole jsou tyto: pole mohou mít maximálně 32 000 prvků a celkem maximálně 1 000 000 prvků.

Další možné datové struktury jsou zásobník (stack), fronta (queue), seznam (list), slovník (map), fronta s prioritou (priority queue) a tabulka (grid). Tyto jsou přístupné jedině v placené verzi Game Maker Standard.

Datové typy[editovat | editovat zdroj]

Aby jazyk byl, co nejjednodušší, tak používá jen dva datové typy: reálná čísla a řetězce.

  • Řetězec (string) - jedná se o uspořádanou skupinu znaků z ASCII tabulky. Délka řetězce může být až 4 294 967 296. Jestliže řetězec překročí tuto velikost, tak je oříznut.
  • Reálná čísla (real) - reprezentace reálného čísla se znaménkem. Je možno použít i šestnáctkovou reprezentaci reálných čísel pomocí znaku $ (příklad cislo=$A //tedy 10 v desitkove soustave). Jazyk GML nepoužívá typ boolean. Pro logické proměnné a podmínky se používá datový typ real s tím, že hodnoty menší, nebo rovno 0 se považují za neparvdu/false a větší za pravdu/true. Takže se dají používat hodnoty 0 pro false a 1 pro true jak je zvykem v jiných programovacích jazycích.

Viditelnost proměnných[editovat | editovat zdroj]

V jazyce GML jsou dva typy lokálních proměnných: lokálních vzhledem k instanci objektu a vzhledem ke skriptu. Lokální proměnnou vůči instanci lze volat pouze s prefixem proměnné nebo pomocí klíčového slova with. Proměnné lokální vůči skriptu jsou viditelné jedině během běhu skriptu a na konci skriptu jsou uvolněny. Když je proměnná vytvořena pomocí přiřazení, tak je vytvořena jako instančně lokální, ale existuje i po konci běhu skriptu. Pro deklaraci proměnné lokální ve skriptu se používá klíčové slovo var (například var foo, bar;).

Existují i globální proměnné, které se definují pomocí klíčového slova glabalvar anebo prefixu global, při čemž platí, že k proměnným vytvořeným s prefixem global se vždy přistupuje pomocí tohoto prefixu a k těm vytvořeným pomocí klíčového slova globalvar, jak kdyby se jednalo lokální proměnné skriptu.

Jestliže je více skriptů spuštěno najednou neexistuje jiný způsob jak přistoupit k lokální proměnné jiného skriptu než, když je předána jako atribut nějaké funkce.

Alokace proměnných[editovat | editovat zdroj]

GML automaticky alokuje paměť pro proměnné při prvním použití a používá dynamické typování. Přiřazení hodnoty do proměnné jiného typu je možné. GML neposkytuje žádné rozhraní na uvolnění jednou alokované proměnné. Paměť je uvolněna automaticky až skončí skript či instance je zrušena.

Identifikace a odkazování na instance[editovat | editovat zdroj]

GML nepodporuje ukazatele, tedy se musí využít jiné techniky k odkazování na data v paměti. Každdá instance v GML má jedinečné ID, která se dá použít jako reference na ni. Toto ID lze získat pomocí vestavěné funkce id.

Příklady kódu[editovat | editovat zdroj]

Následují příklady kódu.

Úsek kódu Hello world zobrazující text ve vyskakovacím okně:

show_message("Hello World!");

Stejný příklad jako minulý, avšak text vypisuje do herního okna na počátek souřadnic. Většinou je nutné tento kód psát do draw eventu.

draw_text(0, 0, "Hello World!");

Komentovaná ukázka z kódu hry napsaná v GML.

// Toto je komentar.
/* Toto je blokovy komentar. */
 
/* Deklarace lokalnich promennych, ktere budou uvolneny na konci skriptu. 
   Vsimnete si, ze deklarace neobsahuje typy promennych */
var xx, yy, nn;
 
// Podminka. Muze byt zkracena na "if (can_shoot)".
if (can_shoot = true) // "=" a "==" muze oboji byt pouzito v podminkach jako zapis porovnani.
{  // Zacatek bloku kodu. Je mozno taky pouzit "begin" jako v Pascalu.
 
   /* Nastaveni promenne na false. Muze byt taky napsano takto: "can_shoot = 0;",
      protoze GML nerozlisuje mezi typy boolean a real. */
   can_shoot = false;
 
   /* Zde se nastavi nulty alarm na pet. Promenna alarm bude automaticky snizovana.
      Kdyz bude dosazena nula bude vyvolan alarm0 event. */
   alarm[0] = 5;
 
   /* Zde lokalni promenna xx definovana jako cele cislo (integer)
      a funkce lengthdir_x je pouzita. */
   xx = x + lengthdir_x(14, direction);
   yy = y + lengthdir_y(14, direction);
 
   // Toto vytvori obj_bullet a nasledne vrati jeji instance id do nn.
   nn = instance_create(xx, yy, obj_bullet);
 
   /* Klicové slovo with zpristupnuje clenske promenne objektu primo,
      bez nutnosti zapisovat vyrazy jako nn.speed nebo nn.direction. */
   with (nn)
   {
      speed = obj_tank.speed + 3;
      direction = obj_tank.direction;
   }
}

GML podporuje vice typu syntaxe. Jako příklad může být přepsaní předchozího příkladu v syntaxi podobné Pascalu:

var xx, yy, nn;
if can_shoot = true then begin
   can_shoot := false
   alarm[0] := 5
   xx := x + lengthdir_x(14, direction)
   yy := y + lengthdir_y(14, direction)
   nn := instance_create(xx, yy, obj_bullet)
   with nn begin
      speed := obj_tank.speed + 3
      direction := obj_tank.direction
   end
end

Toto je příklad jednoduchého pohybu ovládaného klávesnicí. Funkce motion_set má dva parametry: směr ve stupních a rychlost v pixelech za krok programu. Její volání nastaví vestavěné lokání proměnné "speed" and "direction" , které Game Maker používá automatickou změnu pozice instance. Tato změna nastává v každém kroku. Pozice instance může být změněná i přímo pomocí nastavení vestavěných proměnných "x" a "y".

if (keyboard_check(vk_left))  motion_set(180,4);
if (keyboard_check(vk_up))    motion_set(90,4);
if (keyboard_check(vk_right)) motion_set(0,4);
if (keyboard_check(vk_down))  motion_set(270,4);
if (keyboard_check(vk_nokey)) motion_set(0,0);

Zde je uvedena komplexnější alternativa volání motion_set(180, 4), která kontroluje zda je místo ve směru posunu.

if (!place_free(x-4,y))
{
   if (place_free(x-4,y-4))
   {
      x-=4;
      y-=4;
   }
   else if (place_free(x-3,y-5))
   {
      x-=3;
      y-=5;
   }
   else if (place_free(x-2,y-6))
   {
      x-=2;
      y-=6;
   }
}
else
   x-=4;

Ukázka volání Direct3D procedury.

d3d_draw_floor(0,0,0,500,600,1,background_get_texture(background1),.01,.01);

V tomto článku byl použit překlad textu z článku Game Maker Language na anglické Wikipedii.

Externí odkazy[editovat | editovat zdroj]

Udržovaná sekce Game Makeru na Devbooku ( solidní tutoriály česky, podpora komunity )