Game Maker Language

z Wikipédie, slobodnej encyklopédie
Prejsť na: navigácia, hľadanie

Game Maker Language (GML) je skriptovací programovací jazyk určený pre použitie v programe vytvorenom za účelom vytvoárania hier - Game Maker.

Existuje aj verzia G-java API, poskytujúca java vývojárom funkcie GML jazyka. Pôvodne ho (jazyk GML) vytvoril Mark Overmars ako základný jazyk programu Game Maker a je kompatibilný s jeho prostredím drag-and-drop (ťahaj a polož), ktoré používa rovnakú syntax.

Jazyk je veľmi jednoduchý, prehľadný, dobrý pre začiatočníka. Nemá striktnú formu písania. Je veľmi podobný ostatným jazykom, jeho výhodou je, že každý môže použiť svoje zvyky z iných jazykov, napr. použitie "and" namiesto "&&", "!=" a "not", použitie zložených zátvoriek a i. Nepoužívajú sa veľké písmená, ale rozlišuje ich.

Rozšírenia[upraviť | upraviť zdroj]

Game Maker podporuje od verzie 7.0 "mechanizmus rozšírení". Rozšírenia je možné vytvárať (v jazyku GML) a zdieľať s ostatnými používateľmi na oficiálnych stránkach autora, alebo si ich tam zdarma stiahnuť. Často to bývajú rozšírenia nejakého miesta, pre určitý typ hier, napr. hra viac hráčov, vykresľovanie zložitých útvarov atď. Každá akcia/funkcia je skript v jazyku GML, ktorý môže užívateľ použiť vo vytváranej hre. Game Maker obshauje predvolený súbor knižníc (vstavaných rozšírení) obsahujúcich bežne používané akcie, ako napr. funkcie pre vykresľovanie, matematiku, prácu so súbormi a i. Pre vytvorenie rozšírenia je možné použiť Extension Maker.

Syntax[upraviť | upraviť zdroj]

GML má syntax veľmi podobnú ostatným jazykom a tak je jednoduché si na ňu zvyknúť. Pre zoznam knižníc, ktoré Game Maker obsahuje, stačí stlačiť F1 a zobrazí sa pomocné okno.

Nerozkazuje ani v použití { a }.

if x = 1 x -= 1

je to isté ako

if (x = 1)
{
  x -= 1;
}

tiež ako

if x = 1
  x -= 1

Operátory[upraviť | upraviť zdroj]

GML používa všetky bežné logické aj matematické operátory. Používa napríklad xor, or, ale pochopí aj &&.

x = x + 1;

je to isté ako

x += 1;

je v edícií Game Makera Studio to isté ako

x++;

Premenné[upraviť | upraviť zdroj]

Game Maker automaticky alokuje pamäť pre všetky premenné, ktoré sú použité. Nie je potrebné ich deklarovať, stačí im rovno priradiť hodnotu. Dá sa zapnúť aj funkcia, že premenné bez hodnoty nastaví na 0. Používa typy Integer, aj keď má rozsah reálneho čísla a String a mriežky, 1-X priestorové. Obsahuje aj vstavané premenné, ako sú napr. pi (3.14), x (koordináty objektu v sústave x) atď.

i = 0;
j = 15;
k = i + j; // k = 15

Premenné môžu byť globálne (použiteľné v celom programe), alebo lokálne (len v danom objekte).

global.globalnapremenna = 1;
lokalnapremenna = 1;

Použitie mriežky:

if global.PocetNabojov[Samopal] < 10
{
  draw_set_color(c_red);
  draw_text(360,53,"Ostava len" + string(global.PocetNabojov[Samopal]));
}

Cykly[upraviť | upraviť zdroj]

GML má vstavanú väčšinu bežných cyklov okrem iteračných (? :). Obsahuje jeden vlastný cyklus, repeat. Chýba mu však často používaný for each, ktorý je však možné nahradiť cyklom with. For each však ako dodatočný skript vytvoril jeden z používateľov a je možné ho stiahnuť[1] na fórach YoYo Games.

// repeat (počet opakovaní)
i = 0;
repeat 5
{
  i += 1;
} 
// i = 5

Použitie cylku with. Ako objekt sa môže použiť all, self, noone, meno objektu atď.:

//with (objekt)
with (podlaha)
{  	
  if (player.x > podlaha[x] && player.x < podlaha[x] + 32)  	
  {
    player.z = player.z + 8;
  }
}

Použitie cyklu switch:

switch druhjablk
{
  case 1: draw_sprite_stretched(spr_1,-1,320,20,50,50); druhjablk_text = "Jonagold"; break;
  case 2: draw_sprite_stretched(spr_2,-1,320,20,50,50); druhjablk_text = "Sungold"; break;
  case 3: draw_sprite_stretched(spr_3,-1,320,20,50,50); druhjablk_text = "Golden Delicious"; break;
  case 4: draw_sprite_stretched(spr_4,-1,320,20,50,50); druhjablk_text = "Silver Delicious"; break;
  case 5: draw_sprite_stretched(spr_5,-1,320,20,50,50); druhjablk_text = "Tehla"; break;
}

Príklady kódu[upraviť | upraviť zdroj]

Gravitačný systém v 3D hre:

if padam = 1
{
  if zspeed < rychlost rychlost = zspeed
  else if zspeed = 0
  {
    padam = 0;
    if ((rychlost < -7) and (rychlost >= -9))
    {
      obj_player.health += rychlost;
    }
    else if ((rychlost < -9) and (rychlost >= -10))
    {
      obj_player.health += 2 * rychlost;
    }
    else if ((rychlost < -10) and (rychlost >= -13))
    {
      obj_player.health += 3 * rychlost;
    }
    else game_end(); 
    rychlost = 0;
  }   
}

Klasický pohybový systém v 3D hre:

if keyboard_check(ord('W')) or keyboard_check(vk_up)motion_add(yaw    ,1)
if keyboard_check(ord('A')) or keyboard_check(vk_left)motion_add(yaw+90 ,1)
if keyboard_check(ord('S')) or keyboard_check(vk_down)motion_add(yaw+180,1)
if keyboard_check(ord('D')) or keyboard_check(vk_right)motion_add(yaw+270,1)
speed*=.75

Skript na náhodnú farbu:

return choose(c_black,c_red,c_navy,c_lime,c_yellow,c_dkgray,c_purple,c_gray,c_white);

Skript na demoverziu hry:

if global.demoverzia = 1
{
  registry_set_root(0);
  if registry_exists_ext('\Software\removethis','removethis')
  {
    show_message("This is only a demo version. To continue playing please download the full version.");
    game_end();
  }
  instance_create(0,0,obj_limitatorfunkcii);
}

Referencie[upraviť | upraviť zdroj]

  1. Príspevok skriptu For each na fórach YoYo Games - http://gmc.yoyogames.com/index.php?showtopic=518316