Pravidla Ucet
Nepřihlášen

Článek

Menu

Jednoduché kreslící efekty
Napsal: DDL Blue
Přidáno: 10.02. 2011

Když člověk neumí příliš dobře kreslit, musí si pomoci jinak. Když je to opravdu zlé, vznikají i takové extrémy, jako hra bez jediného obrázku (Která stejně může vypadat graficky hezky). Do toho se pouštět (alespoň zatím) nebudeme, ale určitě je hezké si hru vylepšit nějakým tím efektem. Některé základní vám můžu ukázat.



Když říkám efekty, nemyslím tím příkazy typu effect_create_above(...); ale myslím tím prvky grafiky vykreslené vlastním kódem. Věřte nebo ne, ale dá se tak vykouzlit celkem slušná grafika. Třeba tato Adderova tato (pouze screen) moje a tato moje hra (vč. zdrojáků) jsou tvořeny bez jediného obrázku. Přehled kreslících příkazů můžete najít v Nicharově článku zde.



V našem příkladě se budeme snažit lehce "oživit" poloprázdnou místnost o dvouch obrázcích + pozadí. Výsledek bude sice trochu přeplácaný, ale to je jen proto, že vám budu chtít ukázat víc věcí na jedné malé místnosti. V praxi se to zase nesmí moc přehánět ;)




Pro zobrazení v plné velikosti klikněte na obrázek

V levo vidíme původní místnost. Barevný přechod, přez něj černý obrys země a dvě jakési svícny,dole propast s vodou, nad ní miniaturní věže nebo nevím, jak bych to nazval. V pravo cíl našeho snažení. Jak můžete vidět, v horní šásti obrazovky jsou jakésy puntíky, což měly být původně hvězdičky, z naší zázračné radioaktivní vody se lyne jakási bílá záře, navíc z vody vylétávají jakási světýlka a z leva do prava nám na pozadí přelétávají malé modře svítící kuličky...



Obdélník s přechodem pod blend módem


První věc, kterou si ukážeme, bude ta záře, která vychází z vody. Ať to vypadá, jak chce, není to nic víc než obdélník s barevným přechodem vylepšený blend módem. Všechny blend módy tu popisovat nebudu, ale vysvětlím alespoň jeden. Jak se můžete dočíst ve výše odkazovaném Nicharově článku o kreslících funkcích, příkaz draw_set_blend_mode(blend mód); mění způsob, jakým se daný objekt vykreslí na obrazovku. Je jich několik. Mezi ty základní patří bm_add, bm_normal, bm_subtract, bm_max a bm_zero (příkaz draw_set_blend_mode_ext(...,...); nepočítám). Vysvětlím tu jen dva. bm_normal je normální vykreslování, bez nějakých vláštních změn. Pokud blend mód změníme na bm_add, platí, že čím je každý pixel tmavší, tím je průhlednější. Navíc se ještě každý pixel zesvětluje v závyslosti na podkladu. Bílá je tedy bez průhlednosti, šedá je poloprůhledná a černá není vidět.

Když tedy nakreslím obdélník s černo-bílým přechodem, objeví se právě ta záře, kterou můžete vidět na obrázku. Pro ty, kterým to ještě nedošlo: Začínáme dole na bílý. Průhlednost žádná. Jak se dostáváme nahoru, barva tmávne a s ní se zvyšuje i průhlednost. Úplně nahoře obdélníku by měla být černá, ale protože vykreslujeme pod blend módem, nebude tam vidět nic.


Kód bude vypadat následovně:
draw_set_blend_mode(bm_add); //Nastavíme blend mód
draw_set_alpha(0.5);//můžeme nastavit průhlednost. Záře se tím zkrátí a dole bude začínat poloprůhledná.
draw_rectangle_color(x,y,x+31,y-250,c_black,c_black,c_white,c_white,0);// Vykreslíme obdélník s přechodem...
draw_set_blend_mode(bm_normal);//a vrátíme blend mód do normálu.


NIKDY nezapomeňte vrátit blend mód na bm_normal. Jinak se vám bude pod blend módem vykreslovat úplně všechno. A když říkám všechno, myslím tím i sprity objektů, prostě snad všechno vyjma kurzoru ;)


Než dojdu k dalšímu prvku, poukázal bych na jednu podle mě obrovskou výhodu grafiky generované kódem (tkzv. procedurální grafiky) a to její velice snadnou animovatelnost. Stačí pouze měnit údaje v příkazech a výsledek se může velmi jednoduše rozpohybovat, rozblikat nebo může měnit svoji průhlednost. Dosáhneme toho tak, že do argumentů dosadíme proměnnou, kterou budeme určitým způsobem měnit. Způsobů je několik. Já vám ukážu několik, ale můžete si vymyslet v podstatě cokoliv. Ty vaše se můžou vyvozovat např. z nějaké skutečnosti hry (např. počtu životů, vzdálenost od nějakého jiného objektu atd., záleží na vaší fantazii), nebo se prostě měnit stále stejně. Ti, co třeba zkoušeli tvořit 8-bitovou hudbu určitě viděli tóny pojmenované jako "square", "sine", "triangle", nebo "saw". Po tomdle obrázku určitě pochopíte proč :).


Pro zobrazení v plné velikosti klikněte na obrázek

Názornost nadevše :). Zaznamenával jsem průběh měnění proměnné do grafů a vylezlo mi toto.


Sinusoida je graf goniometrické funkce sinus (Matematika +-9. tř. ZÅ ). V gml se zapisuje jako sin(x). Stačí hodnotu x každý step zvětšovat o nějakou malou hodnotu, např 0.4 a funkce nám bude vracet krásnou vlnovku v rozmezí -1 až 1.


Triangly nejsou nic jiného, než že proměnná stoupá z minimální hranice až k maximální a potí zpátky k minimální. Vcelku snadno toho lze dosáhnout pomocí dvouch proměnných, kdy jedna označuje, zda má ta druhá zrovna klesat či stopuat. Zbytek už je pouze o podmínkách ve stepu.


Saw, neboli pilku vytvoříme jednoduše tak, že prostě budeme proměnnou neustále zvětšovat a když přesáhne určitou mez, vrátíme ji zpět na 0. Nebo to taky můžeme udělat naopak, tj. zmenšovat proměnnou a při dosáhnutí 0 vrátit proměnnou zět na určitou hodnotu.


Square, neboli čtverce lze udělat i pomocí alarmů. Prostě pokaždé po nějaké době podmínkou změníme hodnotu proměnné. (třeba z 0 na 1 nebo z 1 na 0 atd)


Tangens je další z goniometrických funkcí. V praxi se tímto způsobem asi moc nevyužije, ale třeba se to bude někomu hodit :). Používá se obdobně, jako Sinus. Zapisuje se tan(x).


Goniometrické funkce jsou původně určeny k určování délek stran a úhlů v pravoúhlém trojúhelníku. Jsou na nich založené příkazy lengthdir_x(...); a lengthdir_y(...);. Pokud je neznáte nebo jste je už zapoměli, doporučuju si o nich něco najít, neuvěřitelně se někdy hodí ;).


Příště (Možná už na novém magazínu) se podíváme na ostatní efekty. Pro dnes už to myslím stačí :). Dotazy do komentářů.


Ostatní díly seriálu:
Klíčová slova: draw kreslící efekty DDL Blue blend mode
 

Komentáře:

Napsal: DDL Blue
Přidáno: 12.02. 2011

Tak jasný, ale výsledek je v podstatě skoro stejnej (nebo hodně podobnej) a vysvětlovat, jak přesně BM funguje v článku pro tudle cílovou skupinu snad není až tak úplně nutný :). Jinak díky ;)

Trvalý odkaz

Napsal: Seeker
Přidáno: 12.02. 2011

Jenom dodám takovou korekturu:

bm_add nedělá nic s průhledností, on ponechá původní pozadí a přičte hodnoty pixelů vykresleného. Tzn. když přes bm_add vykreslíš na šedý pozadí obdélník šedá-bílá, bude to celý bílý. Protože bílá+šedá = bílá a šedá+šedá = bílá.

Trvalý odkaz

Napsal: mSamyel
Přidáno: 11.02. 2011

Pěkný! :)

Trvalý odkaz

Napsal: NicharCZ
Přidáno: 11.02. 2011

Nádherný článek. Blendmody neovládám a tohle jsem přesně potřeboval. Těším se na pokračování.. :)!

Trvalý odkaz

Velkej Chytrák
Copyright (c) 2001-2010