Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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 - GameMaker - Efekty

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:

GameMaker - Efekty

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žením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Všechny články v sekci
GameMaker - Efekty
Článek pro vás napsal Satik64
Avatar
Uživatelské hodnocení:
2 hlasů
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.
Aktivity