Inštancie a objekty, čo to je? - game maker
Ako som si všimnl, tak veľa aj pokročilejších vývojárov, pohybujúcich sa vo sfére GM, stále nepozná rozdiel medzi inštancií a objektom. Keďže sa jedná o veľmi zásadný znalosť, rozhodol som sa spísať tento návod. Vopred by som chcel podotknúť, že hoci sa jedná o základy, je nutná znalosť programátorského minima tj. Práca s GML a hlavne premenné, tie sú pre nasledujúce lekciu kľúčové.
Už skôr sa mi pri vysvetľovaní abstraktných problémov z oblasti programovania osvedčilo využívať reálne príklady, ak chcete pripodobnenie. Tohto postupu sa budem držať aj teraz. Zo všetkého najskôr si ujasníme názvoslovie. Termíny, o ktorých bude reč: objekt, inštancie, sprite, funkcie, premenná. Ak si nie ste istí niečím z predchádzajúceho zoznamu, tak uvediem stručný popis.
Objekt je to čo upravujete v hlavnom okne programu GM. Objekty sa vytvára pomocou tlačidla s modrou guľou prípadne príslušnú kláv. skratkou. Vo výsledku sú všetky objekty zobrazené v ľavom paneli v zložke Objects.
Inštancia je to, čo umiestňujete v Room Editore a tiež to čo je, niekedy nie je, vidieť pri spustení hry. Inštancie sa nikde v žiadnom zozname v editore nezobrazí. To ako bude inštancie vyzerať, určuje jej sprite. Sprite je teda obrázok, tu myslím nie je čo vysvetľovať.
Pomocou funkcií určujete, ako bude hra fungovať. Vždy ich meno končí okrúhlymi zátvorkami. Funkcie môžu a nemusia mať argumenty a môžu a nemusia vracať hodnotu.
A nakoniec premenné. Ide o špeciálny "slová", ktorá zatupují určenú hodnotu. Ospravedlňujem sa za toto skrátenie, ale premenné by vydali na samostatný článok. Kto nevie pracovať s premennými, tomu tento článok rovnako veľa nedá.
Zoznam všetkých inštancií je možné získať v menu Tools, položka Show instances, pri spustení v debug móde. To je tá červená šípka v toolbaru.
Po dlhšom premýšľaní som dospel k záveru, že najlepším prirovnaním bude baliaca linka. Predstavte si veľkú budovu vybavenú skladiskom, pásovým dopravníkom a robotom s ovládacím pultom. Táto budova je v našom prípade hlavnej editačné prostredie GM. Baliace robot zatiaľ nevie, čo má robiť a od toho tu je operátor (programátor, teda vy), ktorý príde k ovládaciemu pultu a vytvorí robotovi zoznam vecí, ktoré má zabaliť. To zodpovedá vlastnej tvorbe programu v editore. Potom, keď je operátor spokojný prikáže robotu, koľko má zabaliť krabíc. Načo robot vyrazí do skladiska (rozumej zoznam všetkých funkcií, ktoré GM pozná + premenné) a všetko zabalí do škatule, ktorú umiestni na správnu pozíciu v regáli nákladiaku. To je rovnaké ako umiestňovanie v Room Editore. Keď robot umiestni krabicu do regálu, tak na každú z nich napíše poradové identifikačné číslo.
Tak teraz v tom urobíme jasno. Spomínaný zoznam vecí na zabalenie je
vidieť v editore je OBJEKT. Jednotlivé krabice, ktoré
obsahujú veci zabalené podľa zoznamu, sú inštancie.
Inštancií jedného objektu môže byť ľubovoľné množstvo. A každá
inštancia je nezávislá na ostatných. Aspoň čo sa premenných týka.
Premenné si môžete predstaviť ako malé poháre s nálepkou s menom.
Pretože je každá v inej krabici, nemôžu sa navzájom ovplyvniť. To že sa
jedná o inú krabicu, zaistí poradové číslo. V GM sa jedná o
ID inštancie. Je to jedinečné a jednoznačné číselné
označenie každej inštancie v hre.
Tí z vás, ktorí už máte skúsenosti s vyššími objektovo
orientovanými jazykmi, napríklad C #, Java ... Môžu nájsť podobnosť v
systéme tvorby objektov. Triedy v OO jazykoch sú v GM označované ako objekty
a objekty z OO sú v GM inštancie.
Niekto by si povedal, že tým zábava končí. Omyl! Opak je pravdou. Práve teraz iba začína tá pravá zábava. S jednotlivými inštanciami je totiž možné pracovať. Je jediný spôsob ako s inštanciami pracovať a to meniť hodnoty ich premenných. Než budeme pokračovať, je nutné si uvedomiť, že existujú dva "druhy" premenných - užívateľské a defaultný. Termín užívateľské premenné hovorí sám za seba, to sú tie, ktoré si nastaví sám programátor pre svoje potreby. Potom tu sú ale ešte defaultný premenné. Tie obsahuje úplne každá inštancie. Ich kompletný zoznam nájdete v menu Scripts, položka show Built-in variables. Ja spomeniem len tie najdôležitejšie: id, x, y, speed, direction, sprite_index. Spôsobov ako ovplyvniť premennej inej inštancie je niekoľko. V princípe však ide o to isté, adresovanie. To znamená, že programu povieme, do ktorej krabice má siahnuť. Adresovanie sa uskutočňuje pomocou operátora bodka ".". Najjednoduchší spôsob je:
obj_lampa.sviti = 1;
Tento kód nastaví všetkým inštanciám objektu obj_lampa premennú sviti na 1. To je síce pekné, ale čo keď chceme rozsvietiť len jednu lampu? To nie je problém, akurát musíme poznať jej id. To je možné zistiť pomocou veľkého množstva funkcií alebo v Room Editore po nabehnutí myšou, prípadne v Debug móde. Každopádne akonáhle poznáme id inštancie, máme stále niekoľko možností:
(102022).sviti = 1; //pokud známe přesně id instance i = 102022; i.sviti = 1; inst = instance_nearest(x,y,obj_hrac); inst.sviti = 1; //rozsvítí se lampa nejblíže hráči
Poslednou možnosťou je použitie operátora with, to je však ako ísť na komára s kanónom.
with(100212){ sviti = 1;//nyní už se nepoužívá adresování tečkou }
Operátor with nájde svoje využitie, ak chceme prikázať inej inštancii, aby vykonala funkciu. Báječným príkladom je funkcia instance_destroy (), ktorá zničí volajúci inštanciu. Ako to však urobiť, keď chceme zničiť inú inštanciu? Použijeme operátor with.
with(102010){
instance_destroy();
}
Týmto zničíme inštanciu s id 102010. Samozrejme, že môžeme použiť funkciu pre zistenie požadovaného id. Týmto pre dnešok skončíme. Nabudúce sa pozrieme na jednotlivé funkcie, ktoré nám umožnia zistiť id priamo v hre.