Jak na efekty - "měniče" podruhé

Sem vkládejte editovatelné kusy kódu a tutoriály.
Odpovědět
Uživatelský avatar
Pelpet
Příspěvky: 734
Registrován: srpen 6, 2011, 12:03 am
Bydliště: Vsetín
Kontaktovat uživatele:

Jak na efekty - "měniče" podruhé

Příspěvek od Pelpet » říjen 12, 2013, 11:26 am

Zdravím, rád bych se zas jednou podělil o menší výtvor. :3 Sice v GM už téměř vůbec nic nedělám, ale občas když potřebuji honem rychle něco vyzkoušet, používám GM, jelikož vykreslování v něm je daleko jednodušší, než třeba v Javě, C#... Experimentoval jsem s bézierovou křivkou a přechody, jak jsou v CSS3 (viz. http://cubic-bezier.com/).

No a protože to je jako dělané pro měniče, co jsem zde kdysi posílal (ačkoliv ohlas měly asi u 2 lidí... viz. http://www.forum.velkejchytrak.cz/viewt ... =16&t=1504), tak jsem to s nimi propojil. Vlastně udělal úplně novou, lepší verzi. Navíc si myslím, že tato verze by mohla zaujmout mnohem více lidí. Na první verzi někteří brblali, jak je to k ničemu (zřejmě nepochopili použití a praktičnost toho celého), tady už to ale nejsou obyčejné lineární čáry. Tady to jsou všelijaké křivky a opravdu dají efektům další rozměr.

Popis funkcí:

Kód: Vybrat vše

changer_init()
Jako u staré verze, stačí zavolat na začátku hry (ale pak už nevolat znova!). Nebere žádné argumenty, nevrací nic. Prostě jen připraví systém.

Kód: Vybrat vše

changer_start([time], [changer], [reverse]);
Narozdíl od předchozí verze, changery již neumí jít od - do. Nyní se changer pohybuje pouze mezi čísly 0 a 1.

• time - čas, přes který changer plynule změní hodnotu. Pokud není čas zadán, changer dostane hodnotu 0 a nemění se.
• changer - ID changeru. Pokud je tento argument zadán, funkce přenastaví data zadanému changeru. Pokud ID není zadáno, funkce vytvoří nový a vrátí jeho ID (v předchozí verzi to byly 2 sólo funkce changer_add a changer_reset).
• reverse - Jak už jsem říkal, changer se pohybuje od nuly do jedničky. Pokud je reverse = true, pohybuje se naopak od jedničky k nule.

Kód: Vybrat vše

changer_get(changer_id, [easing]);
Tato funkce vrátí hodnotu changeru. Pokud není argument easing zadán, hodnota changeru zůstane nezměněná a je vrácená lineární forma. Pokud easing zadán je, hodnota changeru je před vrácením prohnána touto funkcí, což má za výsledek slibované zakřivení průběhu.

Kód: Vybrat vše

changer_ended(changer_id);
Vrátí zda-li je changer ještě animován, nebo zda-li již skončil (true / false).

Použití
Za předpokladu, že již někde ve hře byla zavolána funkce changer_init a changery jsou tedy připraveny k použití, můžeme vytvořit třeba takovýto objekt:

:gmico127: Create event:

Kód: Vybrat vše

fx  = changer_start(); // Vytvori changer s hodnotou 0
val = 0;
:gmico129: Draw event:

Kód: Vybrat vše

if (changer_ended(fx))
{
    // changer bude stridave menit hodnotu mezi 0 - 1 po jedne vterine
    changer_start(1000, fx, val);
    val = !val;
}

var a;
a = changer_get(fx, ease_in_out);
draw_circle(x + 200 * a, y, 15, 0);
Easing:
Funkce pro easing může být jakákoliv. Changer ji zavolá, do argument0 ji dá lineární hodnotu a očekává, že funkce vrátí pozměněnou, zakřivenou verzi. Takže to může být třeba takto:

Kód: Vybrat vše

return argument0 * argument0;
Pro jednoduchou parabolu (jako v matice: y = x^2).

Ale protože takto psát křivky by bylo dost otravné, vytvořil jsem ještě funkci bezier():

Kód: Vybrat vše

// bezier(t, mx1, my1, mx2, my2);
To je funkce, která vrátí hodnotu přechodu pro kubickou bézierovu křivku určenou 2 body [mx1; my1] a [mx2; my2] (ve skutečnosti jsou tyto body 4, ale 2 z nich jsou konstantní a pro tyto účely s nimi nelze pohybovat). Funguje to naprosto stejně jako dříve zmíněné CSS křivky. Díky této funkci může pak jednoduchá easing funkce vypadat takto:

Kód: Vybrat vše

// Klasicky ease-in-out
return bezier(argument0, .42, 0, .58, 1);
Křivky si můžete nakreslit zde: http://cubic-bezier.com/ a poté stačí jen do této GM funkce zadat ony 4 hodnoty, co na té stránce získáte. První argument zůstane vždy stejný a funkce bezier již udělá všechnu magii.
easing2.png
Jednoduchá ukázka různých typů přechodů.
changer_system_2.0.zip
Obsahuje *.gmk a zkompilovaný *.exe; Také je přibalen *.gmres se scripty.
(1.29 MiB) Staženo 110 x
Enjoy :P
Obrázek Sunken Bridge | Obrázek Moje GM tutoriály | Come on son, let's go outside play Catch the Exception!

Uživatelský avatar
Kešu
Příspěvky: 393
Registrován: srpen 6, 2011, 11:13 am
Facebook: https://www.facebook.com/kesucz
Bydliště: Rakovník
Kontaktovat uživatele:

Re: Jak na efekty - "měniče" podruhé

Příspěvek od Kešu » říjen 12, 2013, 7:44 pm

Hehe! Tohle určitě někdo ocení, osobně jsem až úchylnej na plynulý přechody. :D
Chytrákem od Ned 06. Pro 2009 22:29:46
▬▬▬▬▬▬▬▬▬▬▬▬▬ஜ۩۞۩ஜ▬▬▬▬▬▬▬▬▬▬▬▬
Still alive. - 15.4.2017
blokatt.net

Odpovědět

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 1 host