Tutoriál na tvorbu skákaček 1 - Pohyb a skok
(Napísal Mark Overmars - (C) YoYo Games Ltd, pre itnetwork.cz preložil sdraco)
Plošinovky sú veľmi rozšírené a to hlavne na mobilných zariadeniach. Na scénu sa pozeráte zo strany. Hráč ovláda postavu, ktorá prechádza svetom. Svet je zostavený z plošín. Hráč môže po týchto plošinách chodiť, skákať alebo spadnúť z jednej plošiny na druhú. Môže využívať rebríky alebo laná na to, aby sa dostal na iné miesto atď. Na plošinách sú objekty, ktoré hráč zbiera, nepriatelia, ktorým sa vyhýba alebo ktoré zabíja, páky, ktoré po stlačení otvárajú dvere atď. Hráč tiež potrebuje tréning, aby vedel preskákať cez nebezpečné oblasti. V niektorých skákačkách vidíte naraz celý level, ale väčšinou vidíte iba tú časť s postavou. V takom prípade pribúda ďalšia výzva vo forme hľadaní tej správnej cesty.
Tvorba dobré skákačky nie je nič jednoduché a to ani s Game Maker. Sú tu 3 dôležité aspekty, s ktorými musíme počítať:
- Vytvoriť prirodzený pohyb postavy.
- Vytvoriť dostatočný počet druhov nepriateľov, pozadia atď.
- Starostlivo navrhovať levely tak, aby boli zábavné a ich obtiažnosť narastala.
V tomto tutoriálu sa naučíme vytvoriť jednoduchú plošinovku v Game Makeru. Hru si vytvoríme v niekoľkých fázach. Jednotlivé fázy nájdete ako editovateľné hry na konci článkov. Majú len jeden level, v ktorom sú znázornené určité funkcie. Môžete ich použiť ako základ pre vašu hru.
Základ
Začneme s tou najjednoduchšie plošinovkou. Nájdete ju v súbore platform 1.gmk. V každej plošinovke sú 2 základné objekty: postava ovládaná hráčom a blok, ktorý je použitý na plošiny, po ktorých sa postava chodí. Ten istý blok sa často využíva aj pre múry, cez ktoré hráč nemôže prejsť. Potrebujeme 2 sprity: jeden pre postavu a druhý pre blok. Pre postavu použijeme jednoduchý loptičku. Pre blok použijeme čierny štvorec. Vytvoríme si 2 objekty. Objekt blok je solid a neobsahuje žiadne udalosti ani akcie. Proste tam leží. Objekt postava je oveľa komplikovanejšia.
Pohyb
Ako definovať pohyb postavy je hlavnou náplňou tejto časti tutoriálu. Problém je, že postava musí chodiť po hornej strane plošín. Nesmie plošinami prechádzať. Keď postava vyskočí alebo spadne, musí na ďalšiu plošinu správne dopadnúť. Spôsobov, ako postava môže chodiť, skákať a padať, je nespočet. Rôzne skákačky (plošinovky) používajú rôzne modely. Bežne používame na ovládanie pohybu 3 klávesy. Ľavá šípka by mala postavu posunúť doľava, pravá doprava a šípka hore alebo medzerník (space) vyvolá skok.
Najskôr sa zamyslíme nad pohybom doľava a doprava. Prvým rozhodnutím bude, či necháme postavu meniť svoj smer len keď je na plošine alebo ju necháme ovládať aj počas skoku alebo pádu. Aj keď druhá možnosť nie je prirodzená (je dosť zložité pohybovať sa doľava, keď práve padáte), rozhodli sme sa tú prvú zavrhnúť, čo znamená, že povolíme horizontálny pohyb kedykoľvek a bez ohľadu na to, kde postava zrovna je. Vedie to k lepšej hrateľnosti a vlastne sa to aj jednoduchšie implementuje (programuje).
Musíme sa rozhodnúť ešte o jednej veci a to či bude mať pohyb konštantnú rýchlosť alebo sa bude zrýchľovať tým, že držíte kláves. Z dôvodu jednoduchosti zostaneme pri prvej možnosti. Povolenie zrýchlenie vylepšuje hru, hráč sa musí napríklad rozbehnúť po dráhe, aby mohol preskočiť veľkú dieru.
Ako by ste mali vedieť, postavu možno rozhýbať mnohými spôsobmi. Môžeme nastaviť rýchlosť pohybu alebo jednoducho postavu priamo posúvať. V plošinovkách je najjednoduchšie nechať vertikálny pohyb automaticky (ako uvidíme nižšie) ale horizontálne si riešiť po svojom. Je to celkom jednoduché. V udalosti Keyboard pre kláves <left> skontrolujeme, či je na relatívnu pozíciu (-4, 0) voľno (zaškrtnite relative, znamená to, že súradnice počítame od postavy a nie od začiatku miestnosti). Ak áno, poskočíte s postavou na túto pozíciu (jump to point). S pravou klávesou to bude podobné. Pozrite sa na priloženú ukážku.
Skok
Ako ďalšie budeme potrebovať vertikálny pohyb. To bude zložitejšie. Pre pád postavy využijeme gravitáciu. Mal by sa však zastaviť, keď sa dotkneme podlahy. Tiež budete chcieť určiť maximálnu rýchlosť pádu, inak bude postava padať príliš rýchlo. (To nie je pekné a zároveň to spôsobuje problémy v implementácii, napr. Postava preletí cez podlahu, pretože sa pohybuje príliš rýchlo.) Aby sme toto vyriešili, do step udalosti postavy vložíme kontrolu, či je pozícia pod postavou voľná. Ak áno, postava je vo vzduchu a nastavíme gravitáciu kladnú hodnotu. Inak ju nastavíme na 0. Tiež nastavíme premennú vspeed, ktorá predstavuje vertikálnu rýchlosť. Ak je väčší ako 12, vrátime ju späť na 12. Týmto spôsobom vertikálnu rýchlosť limitujeme na 12. Takže udalosť vyzerá nejako takto (ikony výkričníkov sú iba komentáre a nie sú nutné):
Ďalej musíme správne dopadnúť na podlahu. Je to zložitejšie, než sa zdá. Stane sa to vtedy, keď postava koliduje s pevným objektom (solid). V tejto udalosti by sme mali nastaviť vertikálny pohyb na 0. To však zanechá postavu vznášajúce sa kúsok nad zemou. (Dôvodom je, že objekt je vrátený na svoju predchádzajúcu pozíciu pred kolíziou.) My ale chceme postavu posunúť presne na bod, kde ku kolízii došlo. Našťastie je k tomu v Game Makeru akcie:
Move to Contact. S touto akciou môžete posunúť inštanciu
daným smerom tak, aby dosiahla požadovaného objektu. Ak inštancie s objektom
už koliduje, akcia sa nevykoná. Inak je inštancia postavená tesne pred
kolízii. Môžete špecifikovať smer aj maximálna vzdialenosť k posunu.
Tiež môžete zvoliť medzi pevnými objektmi a všetkými objekty.
Túto akciu použijeme. Ako smer napíšeme premennú direction, v ktorej je uložený smer pohybu inštancie. Ako maximálna vzdialenosť zvolíme 12 (aj napriek tomu, že to nie je úplne vhodné):
Takže celé udalosť kolízie postavy s blokom bude vyzerať takto:
Mohli by ste namietať, že toto potrebujeme urobiť len vtedy, keď narazíme na plošinu pod nami. Ale vlastne sa chceme presunúť na kontaktné pozíciu aj v prípade, že je plošina nad nami alebo sa dotkneme múru zo strany. Je tu jedna dôležitá vec, ktorá je častou príčinou problémov: Predpokladáme, že pôvodnej pozície postavy je voľná (collision free). Síce to očakávame, ale vždy to tak nie je. Častou chybou je, že ak má postava animovaný obrázok, kolízne masky sa mení každý step. Môže sa stať, že nový obrázok na minulej pozícii bude stále kolidovať. Uistite sa, že postava má iba jednu masku kolízie. Našťastie Game Maker od verzie 8 dáva všetkým animovaným obrázkom rovnakú masku kolízie. Aj napriek tomu keď zmeníte obrázok, problém sa opäť prejaví, viac nájdete v ďalšej časti tutoriálu.
Nakoniec musíme postave nastaviť skok, keď stlačíme šípku nahor. Musí sa to však stať len vtedy, keď postava stojí na zemi. Najskôr teda skontrolujeme, či pozície pod postavou koliduje a ak áno, nastavíme vertikálnu rýchlosť napríklad na -10. Určite si budete chcieť pohrať s hodnotami 10 pre vertikálnu rýchlosť a 0.5 pre gravitáciu, aby ste dostali pohyb, ktorý chcete.
Teraz je základ pre skákačku hotový. Navrhnite si level s nejakými plošinami a múrmi, ktoré budú potomkov objektu block (budú mať block nastavený ako parrent). Vložte do miestnosti inštanciu hlavnej postavy a sme hotoví.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 1231x (11.4 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker