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

8. diel - Pohyb v GML časť 2.

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

Pohyb v GML časť 2.

Tak ako minulý diel bude aj toto pokračovanie celé o pohybe. V predchádzajúcom diele som trochu obišiel pohyb definovaný krivkou tak, že som použil vstavané cesty - path. Je to určite najľahší spôsob, ale je to len jedna z mnohých možností. Teraz si ukážeme, ako na súradnice pohybu previesť akúkoľvek matematickú funkciu, ktorú si vygooglíme niekde na nete.

Výber funkcie

Vyhľadáme si na nete nejaké funkcie podľa ich podoby - grafu: google search

Keď sa nám nejaká zapáči, tak si opíšeme jej rovnicu. Mne sa napríklad dosť páči tahle:

y = sin(x)/x

Vybral som si celkom dobre, pretože jej základom je funkcia sínus, ktorú Game Maker priamo vie počítať. Ak budete robiť zložitejšie veci, budete musieť funkciu upraviť tak, aby sa skladala len z vecí, ktoré GM pozná pozri zoznam funkcií. Keď si nebudete vedieť rady, skúste hodiť dotaz na ITnetwork alebo u veľmi zložitých vecí na nejaké matematické fórum. PS: matematikom nevykladajte nič o programovaní, inak sa vám budú snažiť radiť aj v tom :-)

Úprava vstupných hodnôt

Pretože funkcia dáva a berie málokedy hodnoty zrovna o veľkosti súradníc obrazovky, musíme zabezpečiť správne zväčšenie alebo zmenšenie. Najprv zistíme aká x si funkcie žiada, aby vyzerala dobre. V tom pomôže napr. Volfrám alpha, ktorý nakreslí graf a vypíše základné hodnoty. Takže si pripravíme rozsahy:

minimum=-40.5;
maximum=+40.5;
velikost_rozsahu=abs(maximum-minimum);

Riadenie pohybu

Urobíme si pomocnú premennú t, ktorá bude znamenať fáze pohybu a bude sa meniť od 0 do 1 podobne ako to bolo u rovnakého pohybu v minulom diele.

t=0; //začátek pohybu - lze volně nastavit

Zaistíme zvyšovanie to nejakú malú hodnotu. Čím menšie krok, tým bude pohyb plynulejší, presnejší, ale taky pomalší. Takže napr .:

t+=krok;
t=frac(t); //když je větší než jedna, tak zas od začátku

Úprava výstupných hodnôt

Zistíme si rozsahy výstupných hodnôt z grafu. Keď sú malé, zväčšíme, keď sú veľké, zmenšíme. Musí sa jednoducho priblížiť hodnotám súradníc. Pamätajte si:

zvětšování hodnot = násobení      zmenšování hodnot = dělení
posun dolů  = sčítání          posun nahoru  = odčítání

Ja si pre nastavenie rozsahu pomôžem novú premennú s.

s=minimum+(t*velikost_rozsahu);
if (s==0) s=0.0001;   // zabrání dělení nulou

Výpočet

Posledné premenná j už bude obsahovať vlastné funkciu:

j=sin(s)/(s);

Výsledné súradnice:

x=t*room_width;             // x jede plynule zleva doprava
y=(room_height/2)-(j*200);      // y = f(x) pak je posunuto a zvětšeno

V priloženej ukážke sú objekty, ktoré sa pohybujú pomocou vyššie uvedené funkcie a sú podložené grafom, takže je dobre vidieť, ako sa toho presne drží. Pohyb podľa matematické funkcie môže byť v hrách zaujímavý - nepriatelia sa k vám nemusí približovať hlúpo rovno. Možno simulovať pohyby biča alebo tryskajúce fontány. Samozrejme sa to dá taky využiť v škole pri štúdiu vlastností funkcií. Všimnite si napríklad rôzne "hustoty" funkcie v rôznych častiach.

Voliteľné DODATOK PRE matematicky zdatní

Matematická krivka zložená z mnohých funkcií - aneb krivka môže mať akýkoľvek tvar.

čítajte len na vlastné nebezpečenstvo

Pripravil som niečo ako vyššia dievčenská pre matfyzákov a podobné. (V skutočnosti stačí kvalitná stredná technická alebo všeobecná matematika VŠ) Ak nič také nie ste, môžete si proste len pustiť exe z prílohy.

O čo ide?

Je to výpočet Bézierove krivky, tj. Krivky, ktorá je daná sadou bodov. Prvý a posledný bod je súčasťou krivky, ostatné body len krivku do určitej miery priťahujú k sebe, približne ako magnety. Bodov môže byť ľubovoľne veľa a možno tak vytvoriť krivku ľubovoľného tvaru čisto umiestňovaním bodov.

Kto sa pozrel na wiki, si teraz klope na čelo, že som sa pomiatol a že začiatočníkom vysvetľujem veci zložitejšie, než je celý Game Maker. Niečo pravdy na tom je, ale berte to predovšetkým ako ukážku toho, že aj tak zložitú matematiku možné rozložiť na jednoduché elementy, ktoré Game Maker vie. Robí sa to tak, že si definujete funkcie vlastné. Ako to vyzerá, môžete vidieť, keď si otvoríte ukážku bezier.gmk a pozriete sa do zložky Scripts. Mám tam definované tri funkcie: factorial, Bino a bernstain. Moc je teraz neštudujte.

Prakticky užitočná informácia je to, že keď si napr. Skript factorial skopírujete do svojej hry alebo programu, môžete kdekoľvek v kóde GML napísať, factorial (číslo) a funkcia spočíta faktoriál onoho čísla. PS: faktoriál čísla je súčin čísla a všetkých prirodzených čísel nižších ako číslo samo až po jednotku.

Např: factorial(5)=5*4*3*2*1, tedy 120.

Detailný princíp výpočtu Bézierove krivky nebudem moc rozvádzať - kto by mal záujem, môže ma kontaktovať cez PM. Stručne povedané sa musí s každým bodom spočítať jeho váha a tá rozhoduje, ako veľmi bude bod krivku priťahovať.

Ukážka sa ovláda jednoducho. Krivka sa sama automaticky napína medzi všetkými bodmi, ktoré sú aktuálne v miestnosti podľa poradia ich vzniku. Ťahaním môžete body premiestňovať, shift + ľavá myš do voľnej plochy pridá nový bod na koniec krivky a pravá myš existujúce body zmaže. Pokojne pustite ukážku a všetky body odklikejte preč pravú myšou, potom držte shift a naklikajte ľavú body nové. Pozerajte pritom, ako sa krivka krúti podľa nových bodov. Keď chcete ostrý uhol dajte viac bodov do jedného miesta.

V zipsu sú navyše priložené vo forme gmres obe pozadia využiteľná pre vykreslenie grafov. Pridávajú sa pomocou Import Resources z menu. (Import vyžaduje plnú verziu GM8.x)

Ak bol matematický dodatok na vás predsa len príliš, berte to ako vzdialený cieľ a nenechajte sa odradiť. :-)


 

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é 175x (2.44 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Predchádzajúci článok
Pohyb v GML časť 1.
Všetky články v sekcii
Game maker - základy a ikonky
Preskočiť článok
(neodporúčame)
Pohyb v GML časť 3.
Článok pre vás napísal TomBen
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
-
Aktivity