Java týden Předvánoční slevová akce
Využij předvánočních slev a získej od nás 20 % bodů zdarma! Více zde
Pouze tento týden sleva až 80 % na Java e-learning!

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

Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem.
Vydávání, hosting a aktualizace umožňují jeho sponzoři.

(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.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

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

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 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

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

Dopadnutí na zem

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ženo 1212x (11.4 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

 

Článek pro vás napsal David Čápka
Avatar
Jak se ti líbí článek?
4 hlasů
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor sítě se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.
Všechny články v sekci
GameMaker - Plošinovky
Miniatura
Následující článek
Videotutoriál - Gamemaker skákačka a procházení místnosti
Aktivity (2)

 

 

Komentáře

Avatar
Energy
Neregistrovaný
Avatar
Energy:2.2.2012 16:50

Ahoj, chtel bych se zeptat jestli hry vytvořené v makeru jdou nejakym zpusobem převest i na OS android ma s tim nekdo zkušenost? Předem diky za odpověd.

 
Odpovědět
2.2.2012 16:50
Avatar

Redaktor
Avatar
Odpovídá na Energy
:2.2.2012 16:54

Ano jde to umí to nová verze Game makeru 8.1 beta pro, myslím. Má to export pro OS Android, I Phone a ještě další...

 
Odpovědět
2.2.2012 16:54
Avatar
Energy
Neregistrovaný
Avatar
Energy:3.2.2012 10:00

Diky

 
Odpovědět
3.2.2012 10:00
Avatar

Redaktor
Avatar
Odpovídá na Energy
:3.2.2012 13:00

Kdybys ho našel, řekni, už dlouho ho sháním

 
Odpovědět
3.2.2012 13:00
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na
David Čápka:3.2.2012 13:49

Ta verze pro HTML5 už vyšla :) Brzy se objeví i ta pro mobilní zařízení.

Odpovědět
3.2.2012 13:49
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar

Redaktor
Avatar
Odpovídá na David Čápka
:9.2.2012 16:01

HTML5 už jsem si stáhnul. Odkaz na ten pro mobily pls??? :)

 
Odpovědět
9.2.2012 16:01
Avatar
Odpovědět
16.4.2012 17:07
Když chceš uspět, stačí jen skvělý nápad.
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:9.8.2012 23:38

Čau hale prosimte potrebuji radu,mam taky uz nejaky zkusenosti aby jsi se nebal ze mluvis s uplnym zacatecnikem,dik za pochopeni mam to uplne normalne na skoko a stejne to nejde,kdyz to udelam podle tebe a vim ze to mam stejne,tak to taky nejde,napriklad kdyz dojde ke kolizi s blokem,tak projedu normalne zkrz nej a jedu dal a tak podobne a ja tonevim proc nevedel by jsi jak mi pomoct?Proste na mym panacku to nefunguje.Pokud budes chtit neco upresnit neni problem.

 
Odpovědět
9.8.2012 23:38
Avatar
David Jančík
Tým ITnetwork
Avatar
Odpovídá na tomasnagy07
David Jančík:9.8.2012 23:42

Zkoušel jsi stahovat přiloženou ukázku a porovnávat co máš jinak?

Odpovědět
9.8.2012 23:42
Zapomeň, že je to nemožné a udělej to ;)
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:10.8.2012 10:45

ano zkousel mam to uplne stejne a ted se mi jeste deje ze kdyz zpustim game maker tak se ta hra sek menu ne az ta hra a to i kdyz jsem zkousel udelat normalni objekt jenom chuze leva a prva jestli to neni tim nevim co se stalo :(

 
Odpovědět
10.8.2012 10:45
Avatar
tomasnagy07
Člen
Avatar
Odpovídá na tomasnagy07
tomasnagy07:10.8.2012 10:46

*kouse,vmenu ne sorry nejak mi blbne klavesnice

 
Odpovědět
10.8.2012 10:46
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:10.8.2012 14:49

Hale ja jenom doufam ze te neotravuji jenom jsem ti chtel rict ze jsem to uz udelal ale diky za tvuj cas doufam ze te to moc neobtezovalo jenom bych mel posledni dotaz a to jestli je mozny abych nejak zapricinil,ze se mi ta hra bude sekat,protoze kdyz jsem zpustil hru tak v menu vsechno OK a pak kdyz jsem dal nova hra tak najednou se to proste sekalo jak pancek tak i vsechno a kdyz jsem dal novou hru jenom na zkousku tak vsechno v pohode mohlo by to treba zpusobit caste ukladani nebo hodne spritu ci objektu moc bych to potreboval vedet.

 
Odpovědět
10.8.2012 14:49
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar

Redaktor
Avatar
Odpovídá na tomasnagy07
:10.8.2012 14:57

Když dáš do stepu ukládání tak se to obvykle seká (mě teda ne mám moc výkonný procesor :D )celkové zmražení hry to obvykle nezpůsobí, možná při prvním save, ale Rozhodně to nedávej do Stepu nebo kolize, která je častá, je to zbytečný. (A navíc to žere paměť :D

 
Odpovědět
10.8.2012 14:57
Avatar
Satik64
Redaktor
Avatar
Satik64:10.8.2012 15:27

Ukládal bych třeba jenom po dosažení checkpointu nebo tak. Když už bys chtěl ukládat pořád, tak použít alarmy.

Odpovědět
10.8.2012 15:27
Bůh neobdarovává lidi sny, aniž by jim nedal sílu je uskutečnit.
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:11.8.2012 15:55

Je prominte ja jsem to napsal asi blbe ja mam taky vykonej comp mam 8Gb ram a 6 jader na 3,2 GHz a 64 bit windows takze tim to neni ja myslel ukladani jako hry myslim kdyz ji vytvarim a casto ukladam treba udelam novy objekt a hned ulozim atd... atd.... mohlo by to zpusobit nejaky nasledky ohledne sekani nebo tak?? moc bych to potreboval :/ diky predem za odpoved ;)

 
Odpovědět
11.8.2012 15:55
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tomasnagy07
David Čápka:11.8.2012 16:02

Uložení nemá na běh žádný vliv.

Odpovědět
11.8.2012 16:02
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:11.8.2012 16:40

Tak nevim proc se to stalo,a co hodne objektu spritu,atd... je tohle mozny i kdyz bych se divil ze by to pocitac nedal :/ doufam ze neotravuji ale ta rada je pro mne hodne cena :/.

 
Odpovědět
11.8.2012 16:40
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na tomasnagy07
David Čápka:11.8.2012 16:46

To není ani tak o počítači, jako o tom, jak GameMaker uvnitř funguje. Není neznámé, že na tom není moc dobře a je velmi pomalý, zvláště, když máš na scéně moc objektů. Přečti si tento článek: http://www.itnetwork.cz/…ytvorene-hry

Odpovědět
11.8.2012 16:46
Jsem moc rád, že jsi na síti, a přeji ti top IT kariéru, ať jako zaměstnanec nebo podnikatel. Máš na to! :)
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:11.8.2012 21:50

Je fakt diky moc mi to pomohlo a snad uz nic nepotrebuju moc diky.

 
Odpovědět
11.8.2012 21:50
Avatar
tomasnagy07
Člen
Avatar
tomasnagy07:11.8.2012 22:44

ách ne :( :( uz to zase nejde exportoval jsem sprity a objekty abych mel klid a udelal jsem to znova a proste se to porad seka a seka nevim cim to je je to divny neni nejak mozny ze bych sem tu hru dal v tom stavu aby jsi se na to mrknul az by jsi mel cas a pokusil se zjistit kde je chyba jsem zoufalej po nejaky dobe se to zacne sekat a to nemam ani vic nez 3 objekty v mistnosti kde hraju mam tam jenom hrace a zed,pak mam jeste menu ale pochybuju ze to za neco muze nevite co s tim ja uz jsem z toho v haji :( :( a nemuzu na to proste prijit :/. je to nejak mozny s tou hrou?

 
Odpovědět
11.8.2012 22:44
Avatar
Martan04
Člen
Avatar
Martan04:29.12.2012 18:01

Mne se to hybe doleva nebo doprava jenom kdyz je to ve vzduchu. Nevite proc?

 
Odpovědět
29.12.2012 18:01
Avatar
TomBen
Redaktor
Avatar
Odpovídá na tomasnagy07
TomBen:29.12.2012 19:03

Zkusils změnit proces priority?
Stejně by se ti nemělo nic sekat. Na průměrném počítači by měly v klidu
běhat stovky objektů i kontrolou kolize. Jiné GM věci ti jedou normálně?

Odpovědět
29.12.2012 19:03
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
TomBen
Redaktor
Avatar
Odpovídá na Martan04
TomBen:29.12.2012 19:13

Ukázka pod příspěvkem funguje normálně. Zkoušel jsem to a jelo to.
Jediné, co omezuje pohyb je kontrola kolize. Takže máš buď špatně masku
nebo je objekt posazený o pixel pod podlahu nebo nějaká podobná chybka.
Popisovaný efekt má např. zapomenuté vynulování vertikální rychlosti
při kontaktu s pevnými objekty.

Odpovědět
29.12.2012 19:13
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
Avatar
Grimor
Člen
Avatar
Odpovídá na Martan04
Grimor:28.3.2014 19:11

V zmáčknutí UP musíš nastavit check collision y=1

 
Odpovědět
28.3.2014 19:11
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 24 zpráv z 24.