Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
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í.

Optimalizace hry vytvořené v GameMakeru

Jelikož vykreslovací engine není zrovna silnou stránkou GameMakeru, je důležité, aby vaše hra neobsahovala zbytečnosti, které ji zpomalují a kazí tak herní prožitek jejím hráčům. Sepsal jsem čtyři základní chyby, které nejvíce ovlivní rychlost výsledné hry a které zejména nováčci v GameMakeru často přehlíží.

 

Rozlišujte mezi Objektem a Tile

Většina lidí (včetně mne) má tendenci brát každou věc v místnosti jako objekt. Ono to samozřejmě tak brát lze, ale pak se naskýtá problém. Objekt je v GameMakeru brán jako něco, co něco dělá (vykresluje sprite, počítá své kolize, kontroluje své události, vykonává akce a spoustu dalších věcí). Když chceme ve hře něco interaktivního (postavičku, letící střelu nebo rozbitelný předmět), samozřejmě to musí být objekt. Pokud ale potřebujeme neaktivní věci jako strom, použijeme TILE. Tile je odvozeno od slova dláždit a jak název vypovídá, je to prvek, který se jen vykresluje a je navržen tak, aby hru nezpomaloval a v místnosti mohlo být tilů stovky. Když si totiž podlahu (nebo i neaktivní části pozadí) ve hře vydláždíte pomocí Tile (záložka v room editoru), bude fungovat několikrát rychleji a mít menší nároky, než když každá kostka podlahy bude objekt, který se nejen vykresluje, ale počítá se pro něj další kvantum jiných věcí.

Používání Tiles v GameMaker

Zde uvádím několik příkladů použití tiles (použil jsem tiles ze Super Maria jako ukázku). Na obrázku vidíte, že Supermário a dělo musí být objekty, protože jsou aktivní (Mario běhá a dělo střílí). Cihličky těsně pod Mariem musí být objekty také, protože je jim potřeba nastavit vlastnost solid, aby přes ně Mario nepropadával. Ale cihličky v další řadě již nejsou přístupné a proto jsou Tile, stejně jako květinka, která nedělá nic jiného, než že se vykresluje, případně animuje.

Používejte vlastnost Image_speed

Když vytvoříte objekt a přiřadíte mu sprite, ve kterém je více, než 1 obrázek, bude se animovat. Problém je v tom, že moc rychle. Mnoho začátečníků toto řeší tak, že tupě nakopírují ten samý obrázek několikrát zasebou, aby animaci zpomalili. Tato technika sice funguje, ale vaše hra bude mít několikrát větší velikost a paměťovou náročnost. Pro tyto účely existuje proměnná image_speed, kterou má každý objekt. Nabývá hodnot 0-1 (nastavíte buď v kódu nebo přes Set Variable) a reguluje rychlost střídání jednotlivých obrázků spritu. Například objekt Mario, který má Mario.image_speed = 0.5 se bude animovat 2x pomaleji, než kdybyste tuto hodnotu nenastavili. Výchozí hodnota je 1.

Používání image_speed v GameMakeru

Horní obrázek je špatně, protože zabírá 2x více paměti, než je třeba.

Pozor na step událost

Pozor na to, co objekty vaší hry vykonávají v události Step. Provádí se totiž opravdu KAŽDÝ krok (hra standardně provede 30 kroků za sekundu pro každý objekt). Vždy se zamyslete, zda se ona kontrola nebo jakákoli jiná akce musí opravdu provádět tak často.

Nastavujte masku kolize

GameMaker vám u každého nového spritu nastaví jeho masku kolize a to většinou na hodnotu preceise colission checking. To znamená, že objekt bude reagovat se svým okolím přesně podle svého tvaru. Toto je však velmi paměťově náročné a navíc to ve většině případů není potřeba. Například po Mariovi se vysloveně chce, aby se choval jako kostička a také vy byste měli mít u své postavičky nastavenou masku kolize na box. Proč? Protože když máte panáčka všelijak vykrájeného a hýbe se, může se vám stát, že se panáček zastaví tesně před zdí, ale pak změní obrázek a ten už do zdi bude zasahovat. Toto je častá chyba mnoha začátečníků - sekání postaviček v solidních objektech. (dříve měl panáček ruce v bok s tál před zdí, pak rozevřel ruce a ty do zdi přesáhly). Když si panáčka nastavím jako stejně velikou kostičku pro všechny jeho sprity, bude se mi krásně zastavovat před zdí bez ohledu na jeho současný obrázek. Kromě tohoto využítí je dobré box používat na vše, co alespoň trochu připomíná obdelník, takže nevadí, když kolize není úplně stoprocentní - nikdo to nepozná. Nové verze GameMakeru obsahují i další urychlené masky (např. kruh).

Nastavení masky kolize v GameMaker

Na obrázku se obdelník hodí pro střelu a Maria. Naopak pro želvu by vypadalo trapně, kdyby se dala zastřelit na bílých místech a proto precission ponecháme. 


 

Všechny články v sekci
GameMaker - základy a ikonky
Č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