IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Tutoriál na tvorbu skákaček 1 - Pohyb a skok

(Napsal Mark Overmars - (C) YoYo Games Ltd, pro itnetwork.cz přeložil sdraco)

Plošinovky jsou velmi rozšířené a to hlavně na mobilních zařízeních. Na scénu se díváte ze strany. Hráč ovládá postavu, která prochází světem. Svět je sestavený z plošin. Hráč může po těchto plošinách chodit, skákat nebo spadnout z jedné plošiny na druhou. Může využívat žebříky nebo lana k tomu, aby se dostal na jíné místo atd. Na plošinách jsou objekty, které hráč sbírá, nepřátelé, kterým se vyhýbá nebo které zabíjí, páky, které po stisknutí otevírají dveře atd. Hráč také potřebuje tréning, aby uměl přeskákat přes nebezpečné oblasti. V některých skákačkách vidíte najednou celý level, ale většinou vidíte pouze tu část s postavou. V takovém případě přibývá další výzva ve formě hledání té správné cesty.

Tvorba dobré skákačky není nic jednoduchého a to ani s Game Makerem. Jsou zde 3 důležité aspekty, se kterými musíme počítat:

  • Vytvořit přirozený pohyb postavy.
  • Vytvořit dostatečný počet druhů nepřátel, pozadí atd.
  • Pečlivě navrhovat levely tak, aby byly zábavné a jejich obtížnost narůstala.

V tomto tutoriálu se naučíme vytvořit jednoduchou plošinovku v Game Makeru. Hru si vytvoříme v několika fázích. Jednotlivé fáze naleznete jako editovatelné hry na konci článků. Mají jen jeden level, ve kterém jsou znázorněny určité funkce. Můžete je použít jako základ pro vaši hru.

Základ

Začneme s tou nejednodušší plošinovkou. Naleznete ji v souboru platform1.gmk. V každé plošinovce jsou 2 základní objekty: postava ovládaná hráčem a blok, který je použit na plošiny, po kterých se postava chodí. Ten samý blok se často využívá i pro zdi, přes které hráč nemůže projít. Potřebujeme 2 sprity: jeden pro postavu a druhý pro blok. Pro postavu použijeme jednoduchý míček. Pro blok použijeme černý čtverec. Vytvoříme si 2 objekty. Objekt blok je solid a neobsahuje žádné události ani akce. Prostě tam leží. Objekt postava je mnohem komplikovanější.

Pohyb

Jak definovat pohyb postavy je hlavní náplní této části tutoriálu. Problém je, že postava musí chodit po horní straně plošin. Nesmí plošinami procházet. Když postava vyskočí nebo spadne, musí na další plošinu správně dopadnout. Způsobů, jak postava může chodit, skákat a padat, je nespočet. Různé skákačky (plošinovky) používají různé modely. Běžně používáme k ovládání pohybu 3 klávesy. Levá šipka by měla postavu posunout doleva, pravá doprava a šipka nahoru nebo mezerník (space) vyvolá skok.

Nejdříve se zamyslíme nad pohybem doleva a doprava. Prvním rozhodnutím bude, zda necháme postavu měnit svůj směr jen když je na plošině nebo ji necháme ovládat i během skoku nebo pádu. I když druhá možnost není přirozená (je dosti složité pohybovat se doleva, když zrovna padáte), rozhodli jsme se tu první zavrhnout, což znamená, že povolíme horizontální pohyb kdykoli a bez ohledu na to, kde postava zrovna je. Vede to k lepší hratelnosti a vlastně se to i jednodušeji implementuje (programuje).

Musíme se rozhodnout ještě o jedné věci a to zda bude mít pohyb konstantní rychlost nebo se bude zrychlovat tím, že držíte klávesu. Z důvodu jednoduchosti zůstaneme u první možnosti. Povolení zrychlení vylepšuje hru, hráč se musí například rozeběhnout po dráze, aby mohl přeskočit velkou díru.

Jak byste měli vědět, postavu lze rozhýbat mnoha způsoby. Můžeme nastavit rychlost pohybu nebo jednoduše postavu přímo posouvat. V plošinovkách je nejjednodušší nechat vertikální pohyb automaticky (jak uvidíme níže) ale horizontální si řešit po svém. Je to docela jednoduché. V události Keyboard pro klávesu <left> zkontrolujeme, zda je na relativní pozici (-4, 0) volno (zaškrtněte relative, znamená to, že souřadnice počítáme od postavy a ne od začátku místnosti). Pokud ano, poskočíme s postavou na tuto pozici (jump to point). S pravou klávesou to bude podobné. Podívejte se na přiloženou ukázku.

Skok

Jako další budeme potřebovat vertikální pohyb. To bude složitější. Pro pád postavy využijeme gravitaci. Měl by se však zastavit, když se dotkneme podlahy. Také budete chtít určit maximální rychlost pádu, jinak bude postava padat příliš rychle. (To není hezké a zároveň to způsobuje problémy v implementaci, např. postava proletí přes podlahu, protože se pohybuje příliš rychle.) Abychom toto vyřešili, do step události postavy vložíme kontrolu, zda je pozice pod postavou volná. Pokud ano, postava je ve vzduchu a nastavíme gravitaci kladnou hodnotu. Jinak ji nastavíme na 0. Také nastavíme proměnnou vspeed, která představuje vertikální rychlost. Pokud je větší než 12, vrátíme ji zpět na 12. Tímto způsobem vertikální rychlost limitujeme na 12. Takže událost vypadá nějak takto (ikony vykřičníků jsou pouze komentáře a nejsou nutné):

Step událost pro skok - GameMaker - Plošinovky

Dále musíme správně dopadnout na podlahu. Je to složitější, než se zdá. Stane se to tehdy, když postava koliduje s pevným objektem (solid). V této události bychom měli nastavit vertikální pohyb na 0. To však zanechá postavu vznášející se kousek nad zemí. (Důvodem je, že objekt je vrácen na svou předchozí pozici před kolizí.) My ale chceme postavu posunout přesně na bod, kde ke kolizi došlo. Naštěstí je k tomu v Game Makeru akce:

Akce Move to contact - GameMaker - Plošinovky Move to Contact. S touto akcí můžete posunout instanci daným směrem tak, aby dosáhla požadovaného objektu. Pokud instance s objektem již koliduje, akce se neprovede. Jinak je instance postavena těsně před kolizi. Můžete specifikovat směr i maximální vzdálenost k posunu. Také můžete zvolit mezi pevnými objekty a všemi objekty.

Tuto akci použijeme. Jako směr napíšeme proměnnou direction, ve které je uložen směr pohybu instance. Jako maximální vzdálenost zvolíme 12 (i přesto, že to není úplně potřeba):

Akce Move to contact - GameMaker - Plošinovky

Takže celé událost kolize postavy s blokem bude vypadat takto:

Dopadnutí na zem - GameMaker - Plošinovky

Mohli byste namítat, že toto potřebujeme udělat jen tehdy, když narazíme na plošinu pod námi. Ale vlastně se chceme přesunout na kontaktní pozici i v případe, že je plošina nad námi nebo se dotkneme zdi ze strany. Je tu jedna důležitá věc, která je často přičinou problémů: Předpokládáme, že původní pozice postavy je volná (collision free). Sice to očekáváme, ale vždy tomu tak není. Častou chybou je, že pokud má postava animovaný obrázek, kolizní masky se mění každý step. Může se stát, že nový obrázek na minulé pozici bude stále kolidovat. Ujistěte se, že postava má pouze jednu masku kolize. Naštěstí Game Maker od verze 8 dává všem animovaným obrázkům stejnou masku kolize. I přesto když změníte obrázek, problém se opět projeví, více naleznete v další části tutoriálu.

Nakonec musíme postavě nastavit skok, když stikneme šipku nahoru. Musí se to však stát jen tehdy, když postava stojí na zemi. Nejdříve tedy zkontrolujeme, zda pozice pod postavou koliduje a pokud ano, nastavíme vertikální rychlost například na -10. Určitě si budete chtít pohrát s hodnotami 10 pro vertikální rychlost a 0.5 pro gravitaci, abyste dostali pohyb, který chcete.

Nyní je základ pro skákačku hotový. Navrhněte si level s nějakými plošinami a zdmi, které budou potomky objektu block (budou mít block nastavený jako parrent). Vložte do místnosti instanci hlavní postavy a jsme hotoví.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1230x (11.4 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

Všechny články v sekci
GameMaker - Plošinovky
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
4 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity