Do nového roku jako lepší programátoři? Znovu otevíráme večerní školu programování. Nette framework, návrhové vzory, testování nebo vůbec poprvé kurzy ASP.NET dostupné odkudkoli v republice.

8. díl - Pohyb v GML část 2.

Ostatní jazyky GameMaker Základy Pohyb v GML část 2.

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.
TomBenova akademie v GameMakeru

Pohyb v GML část 2.

Tak jako minulý díl bude i tohle pokračování celé o pohybu. V předešlém díle jsem trochu obešel pohyb definovaný křivkou tak, že jsem použil vestavěné cesty – path. Je to určitě nejsnazší způsob, ale je to jen jedna z mnoha možností. Teď si ukážeme, jak na souřadnice pohybu převést jakoukoli matematickou funkci, kterou si vygooglíme někde na netu.

Výběr funkce

Vyhledáme si na netu nějaké funkce podle jejich podoby – grafu: google search

Když se nám nějaká zalíbí, tak si opíšeme její rovnici. Mě se třeba dost líbí tahle:

y = sin(x)/x

Vybral jsem si celkem dobře, protože jejím základem je funkce sinus, kterou Game Maker přímo umí počítat. Pokud budete dělat složitější věci, budete muset funkci upravit tak, aby se skládala jen z věcí, které GM zná viz seznam funkcí. Když si nebudete vědět rady, zkuste hodit dotaz na devbook nebo u velice složitých věcí na nějaké matematické fórum. PS: matematikům nevykládejte nic o programování, jinak se vám budou snažit radit i v tom :-)

Úprava vstupních hodnot

Protože funkce dává a bere málokdy hodnoty zrovna o velikosti souřadnic obrazovky, musíme zajistit správné zvětšení nebo zmenšení. Nejprve zjistíme jaká x si funkce žádá, aby vypadala dobře. V tom pomůže např. wolfram alpha, který nakreslí graf a vypíše základní hodnoty. Takže si připravíme rozsahy:

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

Řízení pohybu

Uděláme si pomocnou proměnnou t, která bude znamenat fázi pohybu a bude se měnit od 0 do 1 podobně jako to bylo u rovného pohybu v minulém díle.

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

Zajistíme zvyšování t o nějakou malou hodnotu. Čím menší krok, tím bude pohyb plynulejší, přesnější, ale taky pomalejší. Takže např.:

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

Úprava výstupních hodnot

Zjistíme si rozsahy výstupních hodnot z grafu. Když jsou malé, zvětšíme, když jsou velké, zmenšíme. Musí se prostě přiblížit hodnotám souřadnic. Pamatujte si:

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

Já si pro nastavení rozsahu pomůžu novou proměnnou s.

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

Výpočet

Poslední proměnná j už bude obsahovat vlastní funkci:

j=sin(s)/(s);

Výsledné souřadnice:

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 přiložené ukázce jsou objekty, které se pohybují pomocí výše uvedené funkce a jsou podloženy grafem, takže je dobře vidět, jak se toho přesně drží. Pohyb podle matematické funkce může být ve hrách zajímavý – nepřátelé se k vám nemusí přibližovat hloupě rovně. Lze simulovat pohyby biče nebo tryskající fontány. Samozřejmě se to dá taky využít ve škole při studiu vlastností funkcí. Všimněte si třeba různé „hustoty“ funkce v různých částech.

VOLITELNÝ DODATEK PRO MATEMATICKY ZDATNÉ

Matematická křivka složená z mnoha funkcí - aneb křivka může mít jakýkoli tvar.

čtěte jen na vlastní nebezpečí

Připravil jsem něco jako vyšší dívčí pro matfyzáky a podobné. (ve skutečnosti stačí kvalitní střední technická nebo všeobecná matematika VŠ) Pokud nic takového nejste, můžete si prostě jen pustit exe z přílohy.

O co jde?

Je to výpočet Bézierovy křivky, tj. křivky, která je dána sadou bodů. První a poslední bod je součástí křivky, ostatní body jen křivku do určité míry přitahují k sobě, přibližně jako magnety. Bodů může být libovolně mnoho a lze tak vytvořit křivku libovolného tvaru čistě umisťováním bodů.

Kdo se kouknul na wiki, si teď klepe na čelo, že jsem se pomátl a že začátečníkům vysvětluji věci složitější, než je celý Game Maker. Něco pravdy na tom je, ale berte to především jako ukázku toho, že i tak složitou matematiku lze rozložit na jednoduché elementy, které Game Maker umí. Dělá se to tak, že si definujete funkce vlastní. Jak to vypadá, můžete vidět, když si otevřete ukázku bezier.gmk a podíváte se do složky Scripts. Mám tam definovány tři funkce: factorial, binom a bernstain. Moc je teď nestudujte.

Prakticky užitečná informace je to, že když si např. skript factorial zkopírujete do své hry nebo programu, můžete kdekoli v kódu gml napsat, factorial(číslo) a funkce spočítá faktoriál onoho čísla. PS: faktoriál čísla je součin čísla a všech přirozených čísel nižších než číslo samo až po jedničku.

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

Detailní princip výpočtu Bézierovy křivky nebudu moc rozvádět - kdo by měl zájem, může mě kontaktovat přes PM. Stručně řečeno se musí s každým bodem spočítat jeho váha a ta rozhoduje, jak moc bude bod křivku přitahovat.

Ukázka se ovládá jednoduše. Křivka se sama automaticky napíná mezi všemi body, které jsou aktuálně v místnosti podle pořadí jejich vzniku. Tažením můžete body přemisťovat, shift+levá myš do volné plochy přidá nový bod na konec křivky a pravá myš existující body smaže. Klidně pusťte ukázku a všechny body odklikejte pryč pravou myší, pak držte shift a naklikejte levou body nové. Koukejte přitom, jak se křivka kroutí podle nových bodů. Když chcete ostrý úhel dejte víc bodů do jednoho místa.

V zipu jsou navíc přiloženy ve formě gmres obě pozadí využitelná pro vykreslení grafů. Vkládájí se pomocí Import Resources z menu. (import vyžaduje plnou verzi GM8.x)

Pokud byl matematický dodatek na vás přeci jen příliš, berte to jako vzdálený cíl a nenechte se odradit. :-)


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal TomBen
Avatar
-

Jak se ti líbí článek?
Celkem (1 hlasů) :
55555


 


Miniatura
Předchozí článek
Pohyb v GML část 1.
Miniatura
Všechny články v sekci
GameMaker - základy a ikonky
Miniatura
Následující článek
Pohyb v GML část 3.

 

 

Komentáře

Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zatím nikdo nevložil komentář - buď první!