Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

5. diel - TomBenova Akadémie v Game Makeru: Lenivosť vynašla koleso

TomBenova akadémie v game maker - Game maker - základy a ikonky

V minulom diele ste sa dozvedeli, ako použiť udalosti a akcie. Teraz by som určite mohol preberať jednu kôpku ikon po druhej a pekne by sme do toho zabředli. Nie. Myslím, že teraz je dôležité niečo celkom iné než preteky v klikanie ikon. Pozrite sa späť na Xylofón z minulého dielu a taky na animovaná kolesá na vode z dielu o grafike. Sú to síce možno pekné kúsky, ale majú jednu totálnej vadu: Otrocké klikanie!

Lenivosť vynašla kolo!

Aby som to trochu vysvetlil než vytvorím bezduchého slovného strašiaka. Predstavte si, že máte prichystaný objekt a potrebujete ho do miestnosti umiestniť desaťkrát. "To je ale jednoduché! Proste ho tam 10x kliknem ", hovoríte si. Ale čo keď to bude treba stokrát alebo päťstokrát? Stále budete klikať? To sa pripravte na mozole, kŕče a syndróm karpálneho tunela ( wiki link). Takto to proste nerobte. Programovanie je tu od toho, aby človek nemusel makať. Počítač je síce hlúpy, ale zato veľmi vytrvalý a pomerne rýchly. Je preto veľký rozdiel medzi tým, čo naklikáte ručne v Game Makeru vopred (vo fáze dizajnu) a čo necháte vytvoriť až za behu programu, tzv. Runtime. Vždy sa na začiatku zamyslite, čo necháte počítač vytvoriť za behu a čo mu předklikáte. Túto úvahu nevynechajte u žiadne hry ani programu, čo kedy budete robiť. A buďte leniví! Hlavným motorom programovanie je a vždy bola práve lenivosť. Bez nej by sme dodnes odpisovali hárky so strojovým kódom a po taškách nosili dierne štítky. Svet sa vždy zmenil len preto, že sa niekomu niečo nechcelo robiť. (Nesmiete byť však leniví myslieť)

Cvičenie

Vytvoríme 50.000 objektov. (Slovami päťdesiat tisíc)

Je jasné, že toto by ste ručne klikali do súdneho dňa. Využijeme preto vytváranie za behu programu, kde nastavíme, že sa počas udalosti Step budú tvoriť inštancie objektu samy. Áno, správne. Počítač bude "klikať" za vás a vy sa budete len pozerať, ako mu to ide. :-)

  • vytvorte si nejaký sprite veľkosti cca 10x10 alebo menšie
  • vytvorte objekt s názvom red (ja mal sprite v červenej farbe a red je pekne krátke slovo) a prideľte mu spomínaný sprite. Inak s tým objektom nerobte nič. Žiadne udalosti, žiadne akcie. Ani ho vôbec nedávajte do miestnosti.
  • vytvorte druhý objekt a nazvite ho tvorca. Viem, že miešam angličtinu a slovenčinu. Pokojne to robte taky. Vyberajte zo všetkých jazykov, ktoré viete tá najkratšia a najvýstižnejšie slová. Len sa vyhnite diakritike, špeciálnym znakom a medzerám v slovách. (Pre oddeľovanie slov používajte podčiarkovník _ alebo striedanie veľkých a malých písmen ... TotoJeMujNazev001)
  • objekt tvorca nebude mať žiadny sprite (a nebude teda po spustení programu vidieť). Vytvorte v ňom udalosti Create a Step. Tá prvá sa spúšťa raz a to krátko po štarte, druhá sa spúšťa stále, kým program beží a objekt tvorca existuje. (Pozn. Spúšťa sa pre každú inštanciu, takže keby bol objekt v miestnosti 4x akcie v jeho stepu budú vykonané v každom z nich - teda 4x za step)
  • V Create pridajte akcii Set Variable. To bude také počítadlo, ktoré bude vedieť, koľko toho zostáva urobiť. Názov (horný riadok) dajte písmeno N a hodnotu (value) dajte 50000 (za behu sa potom bude postupne znižovať o jedna s každou vytvorenou inštanciou). Variable (premenná) je spôsob ako si objekt môže "pamätať" nejakú hodnotu - číslo alebo text.
  • Vo Stepu pridajte akciu Test Variable a vyplňte ju takto: variable: N

    value: 1

    operation: smaller than

Je to tzv. Podmienka a ak za ňu dáte nejakú akciu, vykoná sa len vtedy, keď je podmienka splnená. Keď je u nej akciou viac ako jedna, musíte ich uzavrieť zhora a zdola do trojuholníkov Štart Block a End Block. Podmienka bude kontrolovať, či naše počítadlo menšie ako jedna. Inými slovami: "Ak zostáva menej ako jedna inštancia na výrobu, vykonaj nasledujúce akciu".
  • Za podmienku posadíme spomínané trojuholníky a medzi ne umiestnime akciu Destroy Instance. V tejto akcii sa nemusí nič nastavovať. Tá jednoducho zlikviduje tvorca, ak už bolo vyrobené dosť. Destroy inštancie znamená pre objekt spáchať harakiri. Zvyknite si upratovať v programoch všetko, čo už nepotrebujete. Objekt tvorca potom čo dotvoril nemá čo robiť a je potrebné aby uvoľnil pamäť počítača aj strojový čas, ktorý GM spotrebuje na kontrolu toho, že objekt nič nerobí.
  • Za trojuholník konca bloku posadíme ďalšie modrú osemhranovú ikonu. Bude mať názov Else. Akcia za ňou sa vykoná len vtedy, ak predchádzajúci podmienka splnená naopak nebola. Pri každej podmienky sa vždy zamyslite, čo by mal program robiť, keď sa podmienka nesplní. Uvedomte si, že na rozdiel od človeka, ktorý sa bez pokynov zvyčajne rozhodne nerobiť nič, program "nerobiť nič" nevie. Vždy bude niečo robiť a jediný rozdiel je, či to vy budete mať pod kontrolou alebo nie. Else nemôže byť bez predchádzajúcej podmienky a znamená "v opačnom prípade urob ...".
  • Za Else dajte akciu Create Instance. Tá bude tvoriť objekt red a jediné čo musíme, je oznámiť, kde na obrazovke si inštanciu prajeme mať. My musíme meniť namiesto vytvorenia podľa toho, koľkou inštanciu tvoríme - podľa hodnoty N. Tu príde na rad kúsok "zložité" matematiky a preto ak nie ste budúce matfyzák alebo podobne, preskočte kurzívu a pokračujte prostým vyplnením riadkov ikony.

Operátor mod (čiže modulo) dáva zvyšok po delení a div dáva výsledok delenie zaokrúhlený k najbližšiemu celému číslu. Platí, že A mod B = A- (A div B) * B. Modulo je šikovný operátor, ktorý sa často používa keď chceme, aby nejaké číslo nebolo vyššie ako prípustná hodnota. N mod 10 bude dávať hodnoty menšie ako desať vždycky. Ak je N naplnené radom a, a + 1, a + 2 .. bude ju modulo meniť na 0,1,2,3,4,5,6­,7,8,9,0,1,2,3,4 , 5,6,7,8,9,0,1..atd. Nižšie uvedený vzorec pre x vlastne rozdelí päťdesiattisícové dav objektov na radu po 220 a div posunie riadok kedykoľvek je koniec radu a teda prekročená hodnota 220. S číslami si môžete neskôr zaexperimentovať. Nebojte sa ničoho, save to istí.

Vyplnenie ikony Create Instance:
object: red
x: (N mod 220) * 5
y: (N div 220) * 2
relative: áno - zaškrtnuté (vďaka relative bude vykresľovanie mať pravý horný roh tam, kde položíte do miestnosti objekt "tvorca")

  • Zostáva posledná ikona a tou je zase Set Variable, ktorú nastavíte takto: variable: N

    value: -1

    relative: áno - zaškrtnuté

Vďaka zaškrtnutie relative sa bude znižovať počítadlo o 1 počas každého stepu. Je to teda mínus jedna relatívne k pôvodnému obsahu počítadla.

Miestnosť si vyrobte 1135x550, aby sa tam všetko vošlo.
Room_speed nastavte na 500.
Objekt "tvorca" položte do pozície xy (16,16)
a dbajte na to, aby tam bol len v jednej kópii.

HOTOVO!

Teraz si to pustite a ... môžete ísť na obed. :-) Pretože ako sami vidíte, jede to neskutočne pomaly a teraz možno slabšie povahy začnú preklínať game maker alebo rozbíjať prasiatko na nákup nového počítača. Nechajte prasiatko žiť, ukážem vám kúzlo ..

Kúzlo optimalizácia

Hneď v nadpise takej sprosté programátorské slovo! Optimalizácia znamená zvýšenie rýchlosti, bez toho aby sa vyparila nejaká funkčnosť. A skutočne je to taká malá mágie. Každý program ide napísať na viacerých rôznych spôsobov. Programy napísané v prvom hnutia mysli bývajú síce pochopiteľnejšie pre človeka, ale počítač s nimi máva zvyčajne veľa práce navyše. U nášho príkladu si musíme uvedomiť, ako vlastne GM spracuje naše zadanie. Okrem toho, že vo Stepu tvorí inštancie nášho objektu, tak ešte zakaždým zmaže všetky ich sprity len preto, aby ich hneď zas znova vykreslil. GM totiž automaticky prekresľuje všetky objekty stále dookola, aby bolo vidieť prípadné zmeny (posun, animáciu, zmenu priehľadnosti, atď.). To je ale u toľkých objektov strašná spotreba času. Nám bude stačiť, aby sa vykresľovali zmeny oveľa pomalšie, pretože sa na obrazovke rovnako skoro nič nehýbe.

prevedenie optimalizácia

  1. Do eventu Step objektu tvorca úplne na začiatok pridáme akciu opakovane, ktorá jednoducho zopakuje to, čo po nej nasleduje toľkokrát, koľko má číselne zadané. Nastavte times na 1000. (times znamená anglicky nielen časy, ale aj krát v zmysle násobenie, čiže kolikanásobně budeme opakovať)
  2. Všetky pôvodné ikony uzavrieme do bloku pomocou trojuholníkov, inak by sa opakovala len jedna ikona a to tá bezprostredne nasledujúci po ikone Repeat.

A teraz si to pustite. To, čo trvalo desiatky minút, bude hotovo behom chvíľky. Prečo je to rýchlejšie, keď sa skoro nič nezmenilo? Akcia sme neubrali, naopak pridali a pritom je to rýchlejšie. Ako to? Akcia umiestnené v udalosti sa vykonajú vždy všetky naraz a na ďalšie udalosť dôjde až po vykonaní všetkého zadaného. Tzn. najprv sa vykonajú všetky udalosti vo Stepu a až potom dôjde na "prázdny" Draw, ktorý vykresľuje. Namiesto pokusu o vykresľovanie všetkých doteraz nakreslených objektov zakaždým s vytvorením nového, bude program niečo vykresľovať len jedenkrát za každých tisíc vytvorených objektov. Takže po 50tich vykreslenie je všetko hotové. Keď pri 50K objektoch bude GM stíhať vykresľovať napríklad aj 1x za sekundu. (Čiže fps 1), nebude to vadiť, pretože to znamená, že objekty budú pripravené za 50 sekúnd, čo sa dá prežiť. Je potrebné si uvedomiť, že GM tie objekty považuje za potenciálne pohyblivé, prípadne animovatelné a vykonáva na prázdno hŕbu činností. Od niektorých mu môžeme pomôcť, od iných nie. Ale čokoľvek mu ušetríme, to sa bude hodiť. GM bez základných optimalizáciou nepoužijete takmer na nič a kadejaké pexeso bude potrebovať počítač budúcnosti. Každopádne sa vždy zamyslite nad tým, čo všetko môžete nechať urobiť počítač za vás, aby ste to nemuseli klikať počas tvorby a aby ste pritom zase nezavařili aj superpočítač CRAY.

Takže s pozdravom "Buďte leniví!" zas nabudúce u ďalšieho dielu TBA. :-)


 

Mal si s čímkoľvek problém? Stiahni si vzorovú aplikáciu nižšie a porovnaj ju so svojím projektom, chybu tak ľahko nájdeš.

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 276x (2.42 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Predchádzajúci článok
TomBenova Akadémie v Game Makeru: Udalosti a ikony akcií
Všetky články v sekcii
Game maker - základy a ikonky
Preskočiť článok
(neodporúčame)
TomBenova Akadémie v Game Makeru: Prvýkrát GML
Článok pre vás napísal TomBen
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
-
Aktivity