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

Lekce 7 - Pohyb v GML část 1.

TomBenova akademie v GameMakeru - GameMaker - základy a ikonky

Pohyb v GML část 1.

Pokud jste u minulého dílu dávali pozor, víte jak se zachází v GML s proměnnými. Ale jak toho využít? Každý program je sice vlastně jen nastavování proměnných, ale tato myšlenka má do skutečné hry velice daleko. Dnes se podíváme na něco mnohem konkrétnějšího. Projdeme si základní způsoby jak vytvořit pohyb pomocí GML.

Co a proč ve hrách rozpohybovat?

Pohyb dává hře život a proto by se mělo pohybovat skoro všechno. Jediným omezením by měla být srozumitelnost a přehlednost. Podle typu hry se musí zvolit nějaké přiměřené množství pohybu. Typickým příklad kdy pohyb škodí jsou převody deskových her. Hrál jsem kdysi celkem pěkné šachy BattleChess, které měly chodící, mluvící a bojující figurky. Bylo to moc hezky udělané a dost mě bavilo zkoušet všechny varianty soubojů. Ale když jsem si chtěl opravdu zahrát pořádné šachy, vypnul jsem veškerou animovanou grafiku a nechal jen symbolické značky standardního "nudného" šachu.

Přílišný pohyb škodí a ruší přemýšlení. Když se ale pohybu začnete vyhýbat a hra je příliš statická, odradí velice mnoho hráčů už samotný vzhled. Pohyb musí vypadat přirozeně! Mnoho začátečnických pokusů v GM používá primitivní pohyb nahoru – dolů, vlevo – vpravo většinou v bludišti z nějakých čtverečků. Je to typická ukázka neschopnosti tvůrce a je to vždy vidět hned na první pohled. Typů pohybu je mnoho a vesele je používejte, kdykoli to bude dávat smysl.

Jaké možnosti máme?

  • lineární pohyb (rovně a přímo z bodu A do bodu B)
  • pohyb po křivce (matematicky definovaná cesta)
  • pohyb skládáním vektorů pohybu (např. k pohybu nahoru přidáme pohyb trochu doleva atd.)
  • pohyb vzniklý vyhledáváním cest (mezi překážkami nebo sledováním jiného objektu)
  • pohyb se změnou dynamiky (zrychlení, zpomalení, zastavení)
  • rotace (okolo bodu nebo osy)
  • fyzikální simulace (kyvadlo, pád, odraz, valivý pohyb)
  • změna velikosti (simuluje nejčastěji pohyb v ose Z)
  • změna tvaru (např. těleso tvořené z pohyblivých bublin)

Pozn. pohybem v 3D režimu se zabývat nebudu, protože 3D systém, který je součástí Game Makeru (pracuji s verzí 8.0, budoucí verze mohou být lepší) je nepoužitelně mizerný a bez cizích DLL je trapné něco takového tvořit. Kdo chce dělat především 3D, měl by buď zvážit nějaký skutečný 3D engine nebo si nastudovat použití DLL (nic pro začátečníka). Jinak má celkem smysl mít v GML napsaný GUI, ale výpočet grafiky dělat třeba v C++. Ale pokud s Game Makerem začínáte, 3D režimu se vyhýbejte do doby, než zvládnete všechno ostatní.

Základ pohybu – změna souřadnic

Běžné 2D zobrazení v Game Makeru je tvořeno třemi proměnnými. Souřadnice x udává vzdálenost od levého okraje v bodech a souřadnice y udává vzdálenost od horního okraje. Okrajem se myslí okraj místa na obrazovce, které zabírá okno programu. Třetí proměnnou je depth. Ta určuje co bude vidět, když se dva objekty potkají na stejných souřadnicích. Čím je vyšší, tím je objekt jakoby dál od pozorovatele a bližší objekt ho bude překrývat. Takže je to vlastně taková priorita pro viditelnost (čili ne skutečné 3D).

Okraje v GameMakeru - GameMaker - základy a ikonky

Proměnné x,y a depth lze změnit v jakékoli události zvoleného objektu. Vidět bude ovšem až se v události Draw zobrazí jeho sprite na novém místě. Prohlédněte si ukázku okraje.gmk, kde je objekt s jednopixelovým sprite a mačkáním kláves NumPadu se mění poloha skokem na okraje okna. Musíte si uvědomit, kdy jaká událost nastane, jinak se budete divit, že proměnná je změněna a výsledek není patrný.

Lineární pohyb

Předpokládejme, že objekt je na souřadnicích x1,y1 a my ho chceme dostat na x2,y2 plynulým lineárním pohybem. Abychom mohli pohyb dobře ovládat, založíme si pomocnou proměnnou a nazveme ji t. Ta bude mít na začátku hodnotu 0, na konci hodnotu 1. (potřebujete desetinná místa, např. 0.5 je polovina dráhy, čili nic nezaokrouhlovat)

Vzorec lineárního pohybu

x = x1 + t * ( x2 – x1 ) ;
y = y1 + t * ( y2 – y1 );
t +=  (1/10) ;
Lineární pohyb v GameMakeru - GameMaker - základy a ikonky

Tento vzorec zadejte do události Step a objekt se během deseti Stepů přemístí. Deset je ta hodnota za lomítkem ve vzorci s proměnnou t. Když číslo deset nahradíte room_speed, bude pohyb trvat přesně vteřinu. Dělejte si pokusy, je s tím celkem legrace. Zkuste i pohyb nazpátek snižováním t.

Pokud má někdo problém s matematikou, může zkusit prostě ve Stepu přičítat nebo odčítat nějaká malá čísla od proměnných x a y. Objekt se hýbat bude, ale nebude tak snadné ho kontrolovat.

Pohyb po křivce

Kdo se trápil s matematikou lineárního pohybu, tak by se s křivkou asi rychle odstřelil. Naštěstí má Game Maker poměrně pohodlné řešení. Křivky lze naklikat ve vestavěném editoru. Je v něm snadné vytvořit křivku ostře lomenou i křivku plynulou. Pokud chcete na plynulé křivce ostrý bod, udělejte alespoň 3 řídící body na stejném místě. Jako pozadí lze mít místnost a tak se trefíte přesně, pokud tvoříte třeba slalom mezi překážkami. Výslednou křivku nemusíte nutně vykreslit tam, kde byla v editoru připravena, ale klidně kamkoli po obrazovce.

Paths v GameMakeru - GameMaker - základy a ikonky
Paths v GameMakeru - GameMaker - základy a ikonky

Hotovou křivku - cestu (path) lze používat různými způsoby, ale nejsnazší je získávat souřadnice místa na křivce. Dělá se přes pomocnou proměnnou podobně jako u lineárního pohybu.

Vzorec pro pohyb po předem vytvořené křivce

x = path_get_x ( path0, t );
y = path_get_y ( path0, t );
t +=  (1/100) ;

Proměnná t začíná na nule (začátek cesty) a končí na jedné (konec cesty). Je lépe ji měnit co nejjemněji, aby bylo pěkně vidět jak pohyb objektu kopíruje křivku. Pokud chcete křivku vykreslit, aby bylo vidět dráhu po které objekt jede, použijte v události Draw funkci draw_path tak, jak je to uděláno v přiloženém path.gmk. Pokud chcete mít cestu vykreslenou nějak lépe, je vhodné si ji mít předkreslenou jako sprite. Vykreslování například pomocí mnoha objektů podél křivky je pomalé a nebude asi ani moc dobře vypadat (např. hrozí zubaté okraje nebo různá intenzita v zatáčkách). Pohyb si dobře vyzkoušejte na různých příkladech, které vás napadnou. Aby hry fungovaly, musí se hlavně dobře hýbat. Když vám to nepůjde, koukněte se na přiložené příklady.

Dalším typům pohybů se budeme věnovat ještě v příštím díle TBA. Bude to zajímavé, těšte se.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

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

Staženo 231x (6.09 MB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

Předchozí článek
TomBenova Akademie v Game Makeru: Poprvé GML
Všechny články v sekci
GameMaker - základy a ikonky
Přeskočit článek
(nedoporučujeme)
Pohyb v GML část 2.
Článek pro vás napsal TomBen
Avatar
Uživatelské hodnocení:
4 hlasů
-
Aktivity