Jak používat klasifikační nálepkuTato stránka je součástí kurzu:
středoškolská
Příslušnost: skupinová

Tato stránka slouží ke skladování různých v tuto chvíli nepoužitých kusů výkladu.


Příkazy a metody

editovat

Abychom pochopili princip zacházení s herními objekty ještě o něco přesněji, musíme nahlédnout hlouběji do nitra objektů. Jak jsme si řekli výše, všechny akce s objekty se provádějí tak, že se objektu dá pokyn, aby spustil nějakou funkci, tedy určitý logicky ucelený kousek svého programového kódu. Takovéto na pokyn zvenčí spustitelné funkce nazýváme metody, a o pokynu k jejich spuštění hovoříme jako o volání.[1]

Jsou čtyři metody, které se v objektu volají automaticky:[2]

  • Bezprostředně po vytvoření každého objektu se v něm zavolá metoda create().[3] Ta zpravidla provede základní nastavení objektu — tedy definuje jeho vzhled, povrch, zápach, zvuk, hmotnost, cenu atd.
  • V pravidelných časových odstupech (asi 40 minut reálného času) se v každém objektu zavolá metoda reset(). Ta zpravidla obnovuje ty vlastnosti objektu, které se mohou změnit následnou činností hráčů — například rostou-li na jabloni jablka, která mohou hráči otrhávat, může tato metoda obsahovat opětné doplnění jejich počtu.
  • Při každém bezprostředním setkání objektu s živou bytostí se volá metoda init() — živou bytostí zde rozumíme objekt, kterému bylo povoleno vykonávat příkazy, což jsou typicky jednak hráči, jednak nehráčské postavy jako třeba Josef v úvodní místnosti hry, a bezprostředním setkáním zas míníme přesun objektu do inventáře živé bytosti, přesun objektu do inventáře jiného objektu, v němž se nachází živá bytost, nebo přesun živé bytosti do inventáře objektu. V této metodě se zpravidla definují příkazy, které mají být při zacházení s objektem živé bytosti k dispozici.
  • Před zničením objektu (tedy jeho odstraněním ze hry) se v něm zavolá metoda remove() (či naopak, zavolání metody remove() způsobí zničení objektu, v němž byla zavolána). Ta se zpravidla stará o to, aby objekt dokončil nezbytné započaté akce, případně uložil nějaká data na disk.

Objekty, s nimiž se dá zacházet specifickými příkazy, tedy definují tyto příkazy typicky ve funkci init(). Pokud tedy například objekt pochodně definuje příkazy rozsviť a zhasni, pošle se definice těchto příkazů objektu živé bytosti, která se s pochodní setkala, a tato živá bytost pak může těchto příkazů využívat. Jakmile se ovšem bytost od objektu zase vzdálí, příkazy se pro ni stanou opět nedostupnými.

Příkazy jako rozhlédni se, očichej nebo vezmi, které má mít živá bytost k dispozici stále, a to navíc pro sebe (a ne pro jiné živé bytosti, s nimiž se setká), naproti tomu nemá smysl definovat ve funkci init(), nýbrž ve funkci create(), tedy ve chvíli, kdy objekt právě vznikl a ještě nevstoupil do hry, takže definice příkazů pošle jen sobě jakožto jediné přítomné živé bytosti.[4]

Řídicí objekty virtuálních detailů

editovat

...

Opakuje-li se nějaké skupina pohledů u vícera objektů — např. má-li část jeskynního systému umožňovat prohlédnutí stěn, podlahy, stropu a krápníků — vyčleňují se tyto do samostatného souboru, tzv. „vitem-masteru“. V jednotlivých objektech místností jeskyně pak stačí načíst tento soubor s pohledy. Načítáním z jednoho místa je mnohem jednodušší pohledy spravovat, ve všech místnostech se totiž zobrazí stejným způsobem.

...

  1. V programovém kódu objektu se mohou vyskytovat — a zpravidla také vyskytují — i funkce, které metodami nejsou, tedy nejsou určeny k tomu, aby se popsaným způsobem volaly zvenčí.
  2. Přesněji řečeno volá tyto metody herní ovladač neboli driver, tedy program, který udržuje celou hru v chodu.
  3. Aby se názvy funkcí odlišily od jiných názvů, píší se za ně závorky. Mezi těmito závorkami případně mohou být i parametry funkce, ale tím se budeme zabývat až později.
  4. Přesně vzato to takhle funguje u nehráčských bytostí, které si své základní příkazy definují skutečně ve funkci create(). Hráčský objekt — vytvářený při každém nalogování hráče a opět ničený při odlogování — si je definuje až ve funkci setup_player(), která se volá těsně po create() a která mj. načítá uložený stav hry z minula.