Vianoce v ITnetwork sú tu! Dobí si teraz kredity a získaj až 80 % extra kreditov na e-learningové kurzy ZADARMO. Zisti viac.
Hľadáme nové posily do ITnetwork tímu. Pozri sa na voľné pozície a pridaj sa k najagilnejšej firme na trhu - Viac informácií.

2D odlesky v game maker

Nedávno som vytváral prostredia ľadovej jaskyne do hry. Pretože som ale nebol spokojný s jednoduchým obrázkom múru, chcel som skúsiť vytvoriť efekt, vďaka ktorému by mali múry vlastnú odlesky a vyzerali reálnejšie. Výsledok je v princípe veľa jednoduchý, ale dokáže herné prostredie veľa oživiť. Nevýhodou je, že využíva surface, takže sa nehodí pre veľké roomy. Pre pochopenie kódu je potrebné ovládať Surface a blend mód.

Porovnanie odleskov v game maker - Game maker - Efekty

Tvorba efektu

Najskôr vytvoríme objekt, ktorý bude celý efekt ovládať, napríklad specular_obj. Pretože bude vykresľovať celý efekt, odporúčam zvoliť vysoký depth. Do nasledujúcich udalostí vložíme prí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);
}

Potom stačí vytvoriť 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
    }

Princíp je jednoduchý. Najskôr sa do čistého Surface vykreslí všetky specular masky všetkých objektov, ktoré majú hádzať odleskami (masky určíme neskôr v jednotlivých objektoch do premennej specular_mask). Potom sa cez surface vykreslí sprite s kruhovou priehľadnosťou a vznikne tak prechod k nepriehľadným okrajom obrazovky.

Priehľadný sprite stiahnete v archíve pod článkom, vložte ho do hry ako specular_mask_spr.

Nakoniec vytvoríme objekt spec_parent_obj, ktorý bude prázdny, ale každý objekt s odleskami ho bude mať nastavený v Parent.

Tvorba objektu s odleskom

Teraz už stačí len vytvoriť potrebné objekty. Vytvoríme objekt, dáme mu spomínaný parent spec_parent_obj a priradíme sprite. Teraz musíme mať pripravený okrem pôvodného Spritu aj masku, ktorá bude určovať, kde presne sa prejaví odraz svetla. Tento sprite funguje ako klasická alpha maska, čierne plochy znamenajú žiadny odraz a na bielych sa prejaví plné svetlo. Tu je príklad z priloženého súboru:

Game maker - Efekty

Sprite masky priradíme do premennej specular_mask. Potom ešte musíme nastaviť intenzitu odlesku v premennej specular_alpha, môžete nechať 1. Prikladám aj príklad, v ktorom som vytvoril niekoľko materiálov pre ukážku. Robil som to na rychlo, takže je to naozaj pre ukážku a keď si vyhráte s grafikou, určite dosiahnete oveľa krajších výsledkov. V prípade potreby môžete aj zvýšiť výkon tak, že budete skript efektu volať trebárs len každý tretí step, ale trochu sa to prejaví na plynulosti efektu.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 201x (1.86 MB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Všetky články v sekcii
Game maker - Efekty
Článok pre vás napísal Satik64
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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