NaÄÃtánà skriptu hrou, aneb co je potÅ™eba
Jedna z nemála důležitých znalostà pro skriptera je, jak pracuje hra s jeho skriptem a jakou metodou spouÅ¡tà různé callbacky. DÃky tomu můžeme dosáhnout vysoké efektivity. Zde si popÃÅ¡eme jak vytvoÅ™it skript do hry a co ho vlastnÄ› naÄÃtá a kde. ZaÄneme vytvoÅ™enÃm struktury skriptu.
Vytvořenà souboru se skriptem a jeho obsah
VÅ¡echny skripty ve hÅ™e jsou uložené do souborů *.lua. Tyto soubory jsou naÄÃtány a zpracovávány po spuÅ¡tÄ›nà hry do spustitelné podoby. Soubor *.lua je jednoduché vytvoÅ™it.
- V Notepadu++ (nebo jiném textovém editoru) vytvořte nový dokument
- Tento dokument si uložÃme do složky se strojem (nÄ›kde tam)
- Dokument pojmenujte tÅ™eba mujskript.lua (nesmÃme použÃt diakritiku a speciálnà znaky)
- Máme hotovo
Takto máme vytvořen soubor, do kterého pak budeme zapisovat jednotlivé instrukce (kód) pro hru.
Každý soubor se skriptem pro stroj/zaÅ™Ãzenà musà mÃt záklanà sadu callbacků a nÄ›jakou tÅ™Ãdu pÅ™es kterou k nim budeme pÅ™istupovat. Uvedu zde pÅ™Ãklad a popÃÅ¡eme si ho.
12mujSkript = {};34function mujSkript.prerequisitesPresent(specializations)5 return true;6end;78function mujSkript:load(xmlFile)9 print("Nacetl jsem stroj!");10end;1112function mujSkript:mouseEvent(posX, posY, isDown, isUp, button)13end;1415function mujSkript:keyEvent(unicode, sym, modifier, isDown)16end;1718function mujSkript:update(dt)19end;2021function mujSkript:updateTick(dt)22end;2324function mujSkript:draw()25end;
Jako prvnà musÃme vytvoÅ™it tÅ™Ãdu pro skript. Jelikož Lua je velice zjednoduÅ¡enÃ, jsou tÅ™Ãdy vytvářeny pomocà tzv. tabulek. Nám zatÃm postaÄà to, že takovou tÅ™Ãdu vytvoÅ™Ãme pomocà nazevSkriptu = {};, kde název skriptu je cokoli, co je bez diakritiky a nezaÄÃná ÄÃslem (jako promÄ›nné ke kterým se dostanem pozdÄ›ji). Složené závorky ({}) pak oznaÄujà tabulku. (Řádek 2)
Jako dalÅ¡Ã je soupis callbacků pro hru. Každá s funkcÃ/metod (které jsou volány jako callbacky) se deklaruje klÃÄovým slovem function. NÄ›které musà vracet hodnotu (vÄ›tÅ¡inou o úspÄ›chu - true - a nebo neúspÄ›chu - false). V následujÃcÃm seznamu popÃÅ¡u povinné funkce/metody které nesmà chybÄ›t v žádném skriptu.
- prerequisitesPresent - funkce volaná na zaÄátku hry, která ověřuje, zda se v typu vozidla vyskytujou vÅ¡echny požadované skripty. VstupnÃm parametrem je specializations - tedy tabulka se vÅ¡emi specializacemi stroje. V naÅ¡em pÅ™ÃpadÄ› je klÃÄovým slovem return vracen úspÄ›ch (true)
- load - metoda která se volá pÅ™i naÄtenà stroje. BuÄ pÅ™i koupi a nebo pÅ™i naÄtenà ze savu. VstupnÃm parametrem je xmlFile, tedy xml soubor stoje.
- mouseEvent - callback spouÅ¡tÄ›n pÅ™i pohybu myÅ¡i a jejà události. VstupnÃmy parametry jsou posX, posY, isDown, isUp, button - posX a posY jsou pozice myÅ¡i na obrazovce. isDown, isUp jsou stavy tlaÄÃtka. button je ID tlaÄÃtka na myÅ¡i.
- keyEvent - callback na události klávesnice. VstupnÃmi parametry jsou unicode, sym, modifier, isDown. Unicode je kód znaku v Unicode a isDown je status klávesy stiknutá/nestisknutá. Zbylé 2 parametry nepoužÃvám
- update - metoda volaná pÅ™i každém updatu hry (kolik FPS, tolikrát je volaná za vteÅ™inu). Vstupnà parametr dt je poÄet milisekund od poslednÃho updatu.
- updateTick - metoda volaná pÅ™i každém updatu hry (kolik FPS, tolikrát je volaná za vteÅ™inu). Vstupnà parametr dt je poÄet milisekund od poslednÃho updatu.
- draw - metoda urÄená pro výpis textu na obrazovku, a nebo render layoutů. Nemá vstupnà parametry
JeÅ¡tÄ› bych rád podotkl, že vstupnà parametry u funkcÃ/metod se nesmÄ›jà zaměňovat. Lze je ovÅ¡em pÅ™ejmenovat, ale v takovém pÅ™ÃpadÄ› může vzniknout nÄ›co naprosto nepÅ™ehledného. K funkcÃm (zde jen jedna) pÅ™istupujeme pomocà teÄky (.) a k metodám pomocà dvojteÄky (:). PÅ™ed pÅ™Ãstupovým znakem je název skriptu a za je název metody/funkce
Vysvětlenà zápisu a registrace v modDesc.xml
Pokud máme takto vytvoÅ™ený skript, pak už ho můžeme velmi jednoduÅ¡e vložit do stroje pÅ™es typy vozidel. Samotný skript se zapisuje do tagu <specializations> pod dceÅ™iným tagem <specialization>. napÅ™Ãklad <specialization name="MujNazevSpecializace" className="mujSkript" filename"MujSkript.lua"/>.
Nynà si rozebereme atributy. Atribut name urÄuje název skriptu pro pozdÄ›jÅ¡Ã použità v xml - nezasahuje do niÄeho jiého jen do modDesc.xml. Atribut className je už o hodnÄ› důležitÄ›jÅ¡Ã - urÄuje tÅ™Ãdu v souboru filename od které se má vytvoÅ™it instance a kde má hra posÃlat callbacky.
To by mohlo být vÅ¡e pro tento dÃl naÅ¡eho výukového seriálu. PÅ™ÃÅ¡tÄ› se podÃváme na komentáře a promÄ›nné v jazyce Lua.