7. diel - Pohyb v GML časť 1.
Pohyb v GML časť 1.
Ak ste u minulého dielu dávali pozor, viete ako sa zaobchádza v GML s premennými. Ale ako to využiť? Každý program je síce vlastne len nastavovanie premenných, ale táto myšlienka má do skutočnej hry veľmi ďaleko. Dnes sa pozrieme na niečo oveľa konkrétnejšie. Prejdeme si základné spôsoby ako vytvoriť pohyb pomocou GML.
Čo a prečo v hrách rozpohybovať?
Pohyb dáva hre život a preto by sa malo pohybovať skoro všetko. Jediným obmedzením by mala byť zrozumiteľnosť a prehľadnosť. Podľa typu hry sa musí zvoliť nejaké primerané množstvo pohybu. Typickým príkladom kedy pohyb škodí sú prevody doskových hier. Hral som kedysi celkom pekné šach BattleChess, ktoré mali chodiace, hovoriace a bojujúci figúrky. Bolo to veľmi pekne urobené a dosť ma bavilo skúšať všetky varianty súbojov. Ale keď som si chcel naozaj zahrať poriadnej šach, vypol som všetku animovanú grafiku a nechal len symbolické značky štandardného "nudného" šachu.
Prílišný pohyb škodí a ruší premýšľanie. Keď sa ale pohybu začnete vyhýbať a hra je príliš statická, odradí veľmi veľa hráčov už samotný vzhľad. Pohyb musí vyzerať prirodzene! Mnoho začiatočníckych pokusov v GM používa primitívne pohyb hore - dole, vľavo - vpravo väčšinou v bludisku z nejakých štvorčekov. Je to typická ukážka neschopnosti tvorca a je to vždy vidieť hneď na prvý pohľad. Typov pohybu je veľa a veselo ich používajte, kedykoľvek to bude dávať zmysel.
Aké možnosti máme?
- lineárny pohyb (rovno a priamo z A do B)
- pohyb po krivke (matematicky definovaná cesta)
- pohyb skladaním vektorov pohybu (napr. k pohybu nahor pridáme pohyb trochu doľava atď.)
- pohyb vzniknutý vyhľadávaním ciest (medzi prekážkami alebo sledovaním iného objektu)
- pohyb so zmenou dynamiky (zrýchlenie, spomalenie, zastavenie)
- rotácie (okolo bodu alebo osi)
- fyzikálne simulácie (kyvadlo, pád, odraz, valivý pohyb)
- zmena veľkosti (simuluje najčastejšie pohyb v osi Z)
- zmena tvaru (napr. teleso tvorené z pohyblivých bublín)
Pozn. pohybom v 3D režime sa zaoberať nebudem, pretože 3D systém, ktorý je súčasťou Game Makeru (pracujem s verziou 8.0, budúce verzie môžu byť lepšia) je nepoužiteľné mizerný a bez cudzích DLL je trápne niečo také tvoriť. Kto chce robiť predovšetkým 3D, mal by buď zvážiť nejaký skutočný 3D engine alebo si naštudovať použitie DLL (nič pre začiatočníka). Inak má celkom zmysel mať v GML napísaný GUI, ale výpočet grafiky robiť potrebné v C ++. Ale ak s Game Maker začínate, 3D režime sa vyhýbajte do doby, než zvládnete všetko ostatné.
Základ pohybu - zmena súradníc
Bežné 2D zobrazenie v Game Makeru je tvorené tromi premennými. Súradnice x udáva vzdialenosť od ľavého okraja v bodoch a súradnice y udáva vzdialenosť od horného okraja. Okrajom sa myslí okraj miesta na obrazovke, ktoré zaberá okno programu. Tretí premennou je depth. Tá určuje čo bude vidieť, keď sa dva objekty stretnú na rovnakých súradniciach. Čím je vyššia, tým je objekt akoby ďalej od pozorovateľa a bližšie objekt ho bude prekrývať. Takže je to vlastne taká priorita pre viditeľnosť (čiže nie skutočné 3D).
Premenné x, y a depth možno zmeniť v akejkoľvek udalosti zvoleného objektu. Vidieť bude však až sa v udalosti Draw zobrazí jeho sprite na novom mieste. Prezrite si ukážku okraje.gmk, kde je objekt s jednopixelovým sprite a stláčaním klávesov Numpad sa mení poloha skokom na okraje okna. Musíte si uvedomiť, kedy aká udalosť nastane, inak sa budete diviť, že premenná je zmenená a výsledok nie je zrejmý.
Lineárny pohyb
Predpokladajme, že objekt je na súradniciach x1, y1 a my ho chceme dostať na x2, y2 plynulým lineárnym pohybom. Aby sme mohli pohyb dobre ovládať, založíme si pomocnú premennú a nazveme ju t. Tá bude mať na začiatku hodnotu 0, na konci hodnotu 1. (Potrebujete desatinné miesta, napr. 0.5 je polovica dráhy, čiže nič nezaokrúhľovať)
Vzorec lineárneho pohybu
x = x1 + t * ( x2 – x1 ) ; y = y1 + t * ( y2 – y1 ); t += (1/10) ;
Tento vzorec zadajte do udalosti Step a objekt sa počas desiatich štepu premiestni. Desať je tá hodnota za lomkou vo vzorci s premennou t. Keď číslo desať nahradíte room_speed, bude pohyb trvať presne sekundu. Robte si pokusy, je s tým celkom sranda. Skúste aj pohyb naspäť znižovaním t.
Ak má niekto problém s matematikou, môže skúsiť proste vo Stepu pričítať alebo odčítať nejaká malá čísla od premenných x a y. Objekt sa hýbať bude, ale nebude tak jednoduché ho kontrolovať.
Pohyb po krivke
Kto sa trápil s matematikou lineárneho pohybu, tak by sa s krivkou asi rýchlo odstrelil. Našťastie má Game Maker pomerne pohodlné riešenie. Krivky možno naklikať vo vstavanom editore. Je v ňom ľahké vytvoriť krivku ostro lomenou aj krivku plynulú. Pokiaľ chcete na plynulé krivke ostrý bod, urobte aspoň 3 riadiace body na rovnakom mieste. Ako pozadie možno mať miestnosť a tak sa trafíte presne, ak tvoríte treba slalom medzi prekážkami. Výslednú krivku nemusíte nutne vykresliť tam, kde bola v editore pripravená, ale pokojne kamkoľvek po obrazovke.
Hotovú krivku - cestu (path) je možné používať rôznymi spôsobmi, ale najľahšie je získavať súradnice miesta na krivke. Robí sa cez pomocnú premennú podobne ako u lineárneho pohybu.
Vzorec pre pohyb po vopred vytvorené krivke
x = path_get_x ( path0, t ); y = path_get_y ( path0, t ); t += (1/100) ;
Premenná t začína na nule (začiatok cesty) a končia na jednej (koniec cesty). Je lepšie ju meniť čo najjemnejšie, aby bolo pekne vidieť ako pohyb objektu kopíruje krivku. Pokiaľ chcete krivku vykresliť, aby bolo vidieť dráhu po ktorej objekt ide, použite v udalosti Draw funkciu draw_path tak, ako je to urobené v priloženom path.gmk. Pokiaľ chcete mať cestu vykreslenú nejako lepšie, je vhodné si ju mať predkreslený ako sprite. Vykresľovanie napríklad pomocou mnohých objektov pozdĺž krivky je pomalé a nebude asi ani moc dobre vyzerať (napr. Hrozí zubaté okraje alebo rôzna intenzita v zákrutách). Pohyb si dobre vyskúšajte na rôznych príkladoch, ktoré vás napadnú. Aby hry fungovali, musia sa hlavne dobre hýbať. Keď vám to nepôjde, pozrite sa na priloženej príklady.
Ďalším typom pohybov sa budeme venovať ešte v budúcom diele TBA. Bude to zaujímavé, tešte sa.
Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 231x (6.09 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker