Optimalizácia hry vytvorené v game maker
Keďže vykresľovací engine nie je práve silnou stránkou game maker, je dôležité, aby vaša hra neobsahovala zbytočnosti, ktoré ju spomaľujú a kazia tak herný zážitok jej hráčom. Spísal som štyri základné chyby, ktoré najviac ovplyvnia rýchlosť výslednej hry a ktoré najmä nováčikovia v game maker často prehliada.
Rozlišujte medzi Objektom a Tile
Väčšina ľudí (vrátane mňa) má tendenciu brať každú vec v miestnosti ako objekt. Ono to samozrejme tak brať možno, ale potom sa naskytá problém. Objekt je v game maker braný ako niečo, čo niečo robí (vykresľuje sprite, počíta svoje kolízie, kontroluje svoje udalosti, vykonáva akcie a veľa ďalších vecí). Keď chceme v hre niečo interaktívneho (postavičku, letiaci strelu alebo rozbiteľné predmet), samozrejme to musí byť objekt. Pokiaľ ale potrebujeme neaktívny veci ako strom, použijeme TILE. Tile je odvodené od slova dláždiť a ako názov vypovedá, je to prvok, ktorý sa len vykresľuje a je navrhnutý tak, aby hru nespomaľoval a v miestnosti mohlo byť telu stovky. Keď si totiž podlahu (alebo aj neaktívne časti pozadie) v hre vydláždíte pomocou Tile (záložka, room editore), bude fungovať niekoľkokrát rýchlejšie a mať menšie nároky, než keď každá kocka podlahy bude objekt, ktorý sa nielen vykresľuje, ale počíta sa pre neho ďalšie kvantum iných vecí.
Tu uvádzam niekoľko príkladov použitia tiles (použil som tiles zo Super
Maria ako ukážku). Na obrázku vidíte, že supermario a delo musia byť
objekty, pretože sú aktívne (Mario behá a dialo strieľa). Tehličky tesne
pod Mariom musí byť objekty tiež, pretože je im potrebné nastaviť
vlastnosť solid, aby cez ne Mario neprepadávalo. Ale tehličky v ďalšej rade
už nie sú prístupné a preto sú Tile, rovnako ako kvetinka, ktorá nerobí
nič iné, než že sa vykresľuje, prípadne animuje.
Používajte vlastnosť Image_speed
Keď vytvoríte objekt a priradíte mu sprite, v ktorom je viac, než 1 obrázok, bude sa animovať. Problém je v tom, že moc rýchlo. Veľa začiatočníkov toto rieši tak, že tupo nakopírujú ten istý obrázok niekoľkokrát zaradom, aby animáciu spomalili. Táto technika síce funguje, ale vaša hra bude mať niekoľkokrát väčšiu veľkosť a pamäťovú náročnosť. Pre tieto účely existuje premenná image_speed, ktorú má každý objekt. Nadobúda hodnôt 0-1 (nastavíte buď v kóde alebo cez Set Variable) a reguluje rýchlosť striedanie jednotlivých obrázkov Spritu. Napríklad objekt Mario, ktorý má Mario.image_speed = 0.5 sa bude animovať 2x pomalšie, než keby ste túto hodnotu nenastavili. Predvolená hodnota je 1.
Horný obrázok je zle, pretože zaberá 2x viac pamäte, než je
potrebné.
Pozor na step udalosť
Pozor na to, čo objekty vašej hry vykonávajú v udalosti Step. Vykonáva
sa totiž naozaj KAŽDÝ krok (hra štandardne vykoná 30 krokov za sekundu pre
každý objekt). Vždy sa zamyslite, či sa ona kontrola alebo akákoľvek iná
akcia musí naozaj vykonávať tak často.
Nastavujte masku kolízie
Game maker vám u každého nového Spritu nastaví jeho masku kolízie a to väčšinou na hodnotu preceise colission checking. To znamená, že objekt bude reagovať so svojím okolím presne podľa svojho tvaru. Toto je však veľmi pamäťovo náročné a navyše to vo väčšine prípadov nie je potrebné. Napríklad po Mariovi sa vyslovene chce, aby sa správal ako kostička a tiež vy by ste mali mať pri svojej postavičky nastavenú masku kolízie na box. Prečo? Pretože keď máte panáčika všelijako vykrájeného a hýbe sa, môže sa vám stať, že sa panáčik zastaví tesne pred múrom, ale potom zmení obrázok a ten už do steny bude zasahovať. Toto je častá chyba mnohých začiatočníkov - sekanie postavičiek v solídnych objektoch. (Predtým mal panáčik ruky v bok s tál pred múrom, potom roztvoril ruky a tie do steny presiahli). Keď si panáčika nastavím ako rovnako veľkú kocku pre všetkých jeho sprity, bude sa mi krásne zastavovať pred múrom bez ohľadu na jeho súčasný obrázok. Okrem tohto využitie je dobré box používať na všetko, čo aspoň trochu pripomína obdĺžnik, takže nevadí, keď kolízie nie je úplne stopercentné - nikto to nespozná. Nové verzie game maker obsahujú aj ďalšie urýchlené masky (napr. Kruh).
Na obrázku sa obdĺžnik hodí pre strelu a Maria. Naopak pre korytnačku by vyzeralo trápne, keby sa dala zastreliť na bielych miestach a preto Precission ponecháme.