Přeskočit na obsah

Game Maker Language

Z Wikipedie, otevřené encyklopedie

Šablona:Infobox Software 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 překlad do spustitelného souboru. Má syntaxi podobnou C s možností použití i syntaxe Pascalu. Vytvořil jej Mark Overmars.

GML syntaxe a sémantika

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

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é

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

Příklady kódu

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 integer. */
   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 rychost 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.