Game Maker jednoduše #3 – Základy plošinové hry

Notice: This article was moved from our old webpage and was not translated. We decided to move them here because they were quite popular and it would be a shame to delete them.

Sprity

Na uplný základ použijeme 2 sprity. První bude sloužit jako solidní blok, pomocí kterého později vytvoříme povrch mapy v room editoru. Druhý bude sprite objektu hráče. Co je však důležité – u objektu hráče přepneme kolizní masku na full image, rectangle. Kdyby jste nechali precizní kolizi a váš sprite by měl nepravidelný tvar, zasekával by se později hráč o okraje bloků, což nechceme (toto je jeden z hlavních triků jak se zbavit zasekávání o rohy plošin – velmi častý bug).

Objekty

I objekty budou pouze 2. První bude solidní blok: prostě vytvoříme nový objekt, zaklikneme mu solid, nastavíme sprite na sprite bloku a jsme hotovi. Další objekt již bude o něco složitější. Objektu hráče nastavíme příslušný sprite a nyní již jdeme programovat. Do create tohoto objektu si nadefinujeme proměnné, které budou ovlivňovat vlastnosti systému.

mSpeed – rychlost horiznotálního pohybu

grav – je síla gravitace (něco jako gravity)

jump – je rychlost, jakou hráč vyskočí nahoru

vSpeed – vertikální rychlost (místo gamemakerového vspeed)

vMax – maximální rychlost vSpeed

Proč nepoužít obvyklé proměnné jako gravity a h/vspeed?

Na tuto otázku je jednoduchá odpověď. Pokud nastavíme proměnnou gravity, hspeed, vspeed atd. objekt se začne sám pohybovat podle těchto proměnných, ale nemáme nad tím kontrolu a pokud při pohybu potřebujeme zjišťovat kolizi (což potřebujeme), nesmíme to nechat gamemaker dělat za nás. Ne že by to nešlo, ale je to delší, složitější, pro každý objekt by jsme museli mít kolizní eventy a celé by to bylo takové nepraktické.

Step event objektu hráče

Na druhém řádku se vezme proměnná vSpeed a přičte se k ní gravitace grav. Celé je to uzavřené ve funkcích min a max, aby hodnota vSpeed nikdy nepřesáhla hranice maximální vertikální rychlosti vMax. Potom se spustí cyklus. Jeho vnitřek proběhne tolikrát, kolik je absolutní hodnota proměnné vSpeed. Vezme se pozice objektu, ověří se, jestli je na pozici o pixel vedle po směru vSpeed místo a pokud je, objekt se tam pohne. Pokud narazí na překážku, vynuluje se vertikální rychlost a cyklus se přeruší (break).

Protože v Game Makeru se true/false chová jako čísla 1/0, lze s nimi i počítat. Proto můžeme od sebe odečíst funkce keyboard_check. Dostaneme tak čísla {-1, 0, 1}. -1 vyjde ve chvíli, kdy hráč drží šipku doleva, +1 vyjde když drží šipku doprava a nula vyjde když nedrží nic, nebo naopak obě tlačítka najednou. Pokud vyjde nenulová hodnota, musíme s objektem pohnout. Spustíme opět cyklus. Jeho vnitřek proběhne tolikrát, kolik je nastavená rychlost mSpeed. Vždy zjistím kolizi na pozici o pixel vedle po směru pohybu a pokud je volno, pohnu se tam. Pokud narazím na překážku, přeruším cyklus (break), protože již není potřeba dále hledat volné místo.

Pokud hráč stiskne šipku nahoru, musíme vyskočit. Aby ale nešlo skákat ze vzduchu, musíme zároveň ověřit, jestli stojíme na zemi. Pokud jsou obě podmínky splněny, můžeme skákat. Proměnná s vertikální rychlostí vSpeed se nastaví na převrácenou hodnotu proměnné jump (převrácenou protože pohyb nahoru odpovídá odečítání pozice Y).

Optimalizace

Není zrovna nejlepší skládat mapu ze solidních objektů, když chceme udělat třeba kopec, musíme ho pak složit z objektů a je zbytečné skládat je tam, kde je nebudeme potřebovat, například doprostřed kopce. Je tedy dobré si grafiku pro skládání mapy uložít do tilesetu a ten pak použít ke skládání mapy. Solidní objekty nám pak stačí udělat neviditelné (odklepnout visible) a naskládat je jen na povrch mapy.

Dobrou optimalizací pro větší mapy je také deaktivovat objekty mimo view.

GMK ke stažení

http://products.sunkenbridge.com/?app=download&id=8

Share on FacebookTweet about this on TwitterShare on Google+Share on Tumblr

Comments (0)