Programování pro hračičky/Sklad
Tato 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í metodyremove()
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.
...
- ↑ 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čí.
- ↑ Přesněji řečeno volá tyto metody herní ovladač neboli driver, tedy program, který udržuje celou hru v chodu.
- ↑ 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.
- ↑ 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 funkcisetup_player()
, která se volá těsně pocreate()
a která mj. načítá uložený stav hry z minula.