Úvod do GML
Zdravím všetkých programátorov, ja som DrMrkev. Mnohým ľuďom robí problém prechod z ikon do GML. Aby som povedal pravdu, ani sa moc nečudujem, ma samotnému to pred niekoľkými rokmi dalo poriadne zabrať. Nanešťastie pred niekoľkými rokmi tento článok neexistoval, takže som si tým musel prejsť sám.
Prečo GML?
Prechod na GML (Game Maker Language) je veľmi výhodný z mnohých ohľadov - napríklad miesto hŕbu neprehľadných ikon, ktoré musíte otvoriť, aby ste zistili jej vlastnosť, máte všetko v jednej ikone a to Code (nachádza sa v tabu "Control"). Do tejto ikony budete písať, pokiaľ možno, prehľadný kód. Ikony nie sú nič iné, než GML kód zabalený v "krabičke s obrázkom ikony". Jeden z užívateľov už napísal, čo jednotlivé ikony obsahujú, takže ja to sem písať nebudem. Okrem prehľadnosti je tu ešte jedna obrovská výhoda. Môžete naplno využiť všetky funkcie. Ikon je síce celkom veľa ale je to len zlomok všetkých funkcií, ktoré GML obsahuje. S prechodom na GML sa vám otvoria úplne nové, úžasné možnosti.
Základy
Pokročilejšie programátori sa teraz možno trochu urazí, ale snažím sa vysvetliť naozaj všetko ...
Na konci riadku (až na niektoré situácie ktoré vysvetlím neskôr) vždy píšte bodkočiarka - hovoríte tým, že tam je koniec príkazu. Program totiž jednotlivé riadky nevidí. Pokiaľ nenapíšete bodkočiarka bude si program myslieť že na ďalšom riadku pokračuje riadok predchádzajúcej, čo by mohlo spôsobiť paseku.
Niektoré príkazy (ako napríklad podmienky) nevyžadujú bodkočiarka ale tzv. Blok. Ten vyzerá nejako takto:
{ }
Tieto príkazy totiž vykonávajú nejakú časť kódu. Táto časť kódu je často viacriadkový, každý riadok končí bodkočiarkou (teda skladá sa z viac príkazov). Tieto riadky sa dávajú do bloku, aby program vedel, že k tomuto konkrétnemu príkazu náleží tento viacriadkový kód.
Väčšina príkazov a funkcií majú vlastnosti, ktoré musí užívateľ zadať, aby fungovali podľa očakávania. Tieto vlastnosti (tiež nazývané parametre alebo argumenty) sa píšu do okrúhlych zátvoriek a vyzerá to asi takto:
draw_set_color(make_color_rgb(120,120,8));
Ako vidíte, je možné použiť aj inú funkciu (presnejšie jej výsledok),
ako vlastnosť funkcie. Kód v ukážke nastaví farbu vykresľovanie
(draw_set_color)
a ako parameter vezme funkciu, ktorá vytvorí
novú farbu zo zložiek r, g, b (r = 120, g = 120, b = , čiže červené [R], zelené [G] a
modré [B]. Výslednú farbu vracia ako hodnotu, s ktorou sa dá pracovať ako s
vlastnosťou.
Ako vlastnosti možno použiť iba funkcie, ktoré majú správny návratový
typ. Ako dobrý príkaz možno použiť funkciu keyboard_string, ktorá
zaznamenáva, ktoré klávesy sú postupne stlačené a výsledné slovo vracia
ako text. To v praxi znamená, že draw_set_color
, ktorá ako
vlastnosť potrebuje číslo, by s funkciou keyboard_string, ktorá vracia text
vyhodila chybu.
Podmienky
Povedzme, že máme obchod. Ak hráč klikne na predmet, tak ho kúpi. Máme tu problém - čo keď hráč nemá dosť peňazí? Kúpou ho aj tak? To sa rieši tzv. Vetvením - to znamená, že chod programu meníme podľa situácie. Vetvenia sa vykonáva tzv. Podmienkami, do ktorých spadajú kľúčové slová IF () a ELSE.
pozn. za podmienkami bodkočiarka nepíšte, len blokIF (slovensky "keď") je jedno z najpoužívanejších slov. Ako vlastnosť vezme, čo má platiť, aby sa kód v bloku vykonal. Na to nadväzuje kľúčové slovo ELSE, ktoré sa vykoná, keď podmienka IF nie je splnená.
V pseudokódu by to mohlo vyzerať takto:
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 !"); }
Podmienky je tiež možné vkladať do seba. Povedzme, že hráč môže dostať ocenenie "Prvý obchod". Ocenenie je možné dostať len, keď ho ešte nemáte. Opäť použijem pseudokód pre nasledujúci prí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 !"); }
Tiež môžeme dať viac podmienok do jedného IF, používajú sa k tomu tzv. Logické operátory. Operátormi sú jeden či dva znaky, ktoré majú hlbší význam, než na aký na prvý pohľad vyzerajú.
- "
&&
" [ctrl + alt + c]: tento operátor značí "logické A". Môže byť využitý, ak chcete, aby sa blok podmienky vykonal len ak sú splnené obe požiadavky.
if (hráč má dost peněz && má dost místa v inventáři)
- "
||
"[Ctrl + alt + w]: tento operátor značí" logické ALEBO ". Môže byť využitý, ak chcete vykonať blok za jedného alebo druhého prípadu.
If (hráč má dost peněz || má něco hezkého na výměnu)
Tieto operátory slúžili k rozširovaniu podmienok, ale sú tu ešte jedny operátormi. Tieto operátory nezíváme relačné a slúžia k porovnávaniu hodnôt:
je rovné | == |
nerovná | ! = |
je väčšia | > |
je menšia | < |
je väčšie alebo rovné | > = |
je menšie alebo rovné | <= |
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)
Keď vynecháme pseudokód:
if (oPlayer.money >= itemCost && (InvCap - InvUsed) >= invNeed)
Zátvorky
Je dobré vedieť, kedy a ako použiť zátvorky. Nesprávne použitie zátvoriek môže viesť k veľmi nepekným bugom (kód funguje, ale inak, než by ste čakali).
Povedzme, že potrebujeme porovnať voľné miesto s potrebným.
kapacita - použito >= potřebné
Takto to ale nebude fungovať. Kapacita – použito
sa síce
vypočíta, ale s potřebným
sa porovná iba
použito
. Je tomu tak preto, že relačné operátory majú
prednosť pred aritmetickými operáciami (napríklad mínus). Pomocou
zátvoriek môžeme ručne určiť poradie operácií (podobne ako v
matematike).
Funkčné kód by vyzeral takto:
(kapacita - použito) >= potřebné
Takto sa najprv vykoná odčítanie a až potom porovnaní výsledku s
potřebné
.
príklad možností ktoré GML oproti ikonám ponúkajú
- možnosť využiť 3D zvuk
- môžete využívať fyziku (Box2D engine)
- môžete pracovať s surface (tým sa dajú urobiť napríklad svetla v temnote)
- môžete vo svojich hrách použiť .DLL knižnice (veľmi užitočná vec, dll knižnice vie všetko čo GML nevie)
- môžete použiť pokročilé možnosti kontroly kolízie (napr. v priamke, v okruhu, kontrolovať určité miesto a pod.)
- môžete robiť 3D hry (avšak väčšinou pomerne chabé a zo začiatku len jednoposchodové v štýle Wolfenstein 3D)
pozn. Tento zoznam je veľmi stručný, možnosťou je oveľa viac, avšak keby som sem napísal všetky článok by nemal konca (vďaka dll knižniciam doslova).To by bolo všetko, dúfam, že som vám prechod na GML aspoň trochu uľahčil.