2D odlesky v GameMakeru

Ostatní jazyky GameMaker Efekty 2D odlesky v GameMakeru

Nedávno jsem vytvářel prostředí ledové jeskyně do hry. Protože jsem ale nebyl spokojený s jednoduchým obrázkem zdi, chtěl jsem zkusit vytvořit efekt, díky kterému by měly zdi vlastní odlesky a vypadaly reálněji. Výsledek je v principu hodně jednoduchý, ale dokáže herní prostředí hodně oživit. Nevýhodou je, že využívá surface, takže se nehodí pro velké roomy. Pro pochopení kódu je potřeba ovládat surfacy a blend mód.

Srovnání odlesků v GameMakeru

Tvorba efektu

Nejdřív vytvoříme objekt, který bude celý efekt ovládat, například specular_obj. Protože bude vykreslovat celý efekt, doporučuju zvolit vysoký depth. Do následujících událostí vložíme příslušný kód.

CREATE:

//  nastavení //
alpha = 1;
sila = 0.5; //intenzita odlesků

width=room_width; //délka surfacu
height=room_height; //výška surfacu

surface=surface_create(width,width);
surface_on=1;

STEP:

specular_scr(sila);

DRAW:

//vykreslení efektu
if (surface_on==1)
{
draw_set_blend_mode(bm_add);
draw_surface_part_ext(surface,view_xview,view_yview,view_xview+view_wview,view_yview+view_hview,view_xview,view_yview,1,1,c_white,alpha);

draw_set_blend_mode(bm_normal);
}

Poté stačí vytvořit samotný skript specular_scr

var sila_var;
sila_var=make_color_rgb(argument0*255,argument0*255,argument0*255);


if (surface_on==1)
    {
    surface_set_target(surface);      // aktivace vykreslování do surfacu
    draw_set_color(c_black);
    draw_rectangle(view_xview,view_yview,view_xview+view_wview,view_yview+view_hview,0); //vyčištění předchozího vykreslování

 /////    vykreslení definované specular masky u všech objektů s parentem spec_parent_obj    /////


    with spec_parent_obj
        {
        draw_sprite_ext(specular_mask,image_index,x,y,image_xscale,image_yscale,image_angle,image_blend,specular_alpha);
        }

/////           -------------------------------------------------            //////


    draw_set_color(sila_var);
    draw_line_width(0,room_height,room_width,room_height,1);

     //změna efektu s pohybem viewu
        xpp=view_xview;
        ypp=view_yview;
        index=specular_mask_spr;
        x_sc=view_wview+64;
        y_sc=view_hview+64;


     //překreslení surfacem blend spritem (specular_mask_spr)
    draw_set_blend_mode(bm_subtract)
    draw_sprite_stretched_ext(index,0,xpp-32,ypp-32,x_sc+64,y_sc+64,c_white,1);
    draw_set_blend_mode(bm_normal)
    surface_reset_target(); //deaktivace vykreslování do surfacu
    }

Princip je jednoduchý. Nejdřív se do čistého surfacu vykreslí všechny specular masky všech objektů, které mají házet odlesky (masky určíme později v jednotlivých objektech do proměnné specular_mask). Poté se přes surface vykreslí sprite s kruhovou průhledností a vznikne tak přechod k neprůhledným okrajům obrazovky.

Průhledný sprite stáhnete v archivu pod článkem, vložte jej do hry jako specular_mask_spr.

Nakonec vytvoříme objekt spec_parent_obj, který bude prázdný, ale každý objekt s odlesky jej bude mít nastavený v parentu.

Tvorba objektu s odleskem

Teď už stačí jenom vytvořit potřebné objekty. Vytvoříme objekt, dáme mu zmíněný parent spec_parent_obj a přiřadíme sprite. Teď musíme mít připravený kromě původního spritu i masku, která bude určovat, kde přesně se projeví odraz světla. Tento sprite funguje jako klasická alpha maska, černé plochy znamenají žádný odraz a na bílých se projeví plné světlo. Tady je příklad z přiloženého souboru:

Sprite masky přiřadíme do proměnné specular_mask. Poté ještě musíme nastavit intenzitu odlesku v proměnné specular_alpha, můžete nechat 1. Přikládám i příklad, ve kterém jsem vytvořil několik materiálů pro ukázku. Dělal jsem to na rychlo, takže je to opravdu pro ukázku a pokud si vyhrajete s grafikou, určitě dosáhnete mnohem hezčích výsledků. V případě potřeby můžete i zvýšit výkon tak, že budete skript efektu volat třeba jen každý třetí step, ale trochu se to projeví na plynulosti efektu.


 

Stáhnout

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

 

  Aktivity (1)

Článek pro vás napsal Satik64
Avatar
Autor se věnuje základům game designu, programování her v Game Makeru a Unity a práci v grafických nástrojích. Občas tvoří módy do jiných her.

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


 


Miniatura
Všechny články v sekci
GameMaker - Efekty

 

 

Komentáře

Avatar
TomBen
Redaktor
Avatar
TomBen:

Pěkné, konečně sem někdo hodil něco kvalitnějšího.

Odpovědět  +2 16.11.2013 13:38
Za posledních 200 miliónů let se nic zvláštního nestalo, akorát dinosauři vymřeli a opice se naučily programovat.
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.

Zobrazeno 1 zpráv z 1.