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í.

Zničitelný terén pomocí surface

K pochopení je potřeba umět aspoň základy GML a povrchy (surfaces). Pokusím se je trochu přiblížit, ale k tomu slouží jiné návody. Surfacy umožňují vykreslovat nepřímo na obrazovku, do vlastního neviditelného plátna. Toto plátno se dá později použít ve hře.

Vytvoření terénu

Nejdříve vytvoříme objekt, který nazveme třeba surf_obj. Ten se bude starat o terén. Do eventu Create přidáme následující kody:

global.ground=surface_create(room_width,room_height);

Vytvoří nový surface o velikosti roomu

surface_set_target(global.ground);
 draw_clear(c_white);

Funkce surface_set_target aktivuje vykreslování do surfacu. draw_clear vyplní nový surface zvolenou barvou. Surfacy se nečistí automaticky, proto je nutné používat draw_clear před jejich použitím.

Teď můžeme do nově vytvořeného povrchu vykreslovat. Pro vygenerování země po celém roomu můžete použít jednoduchý kod, který používá 2 sprity o velikosti 48x48 s názvy trava_spr a hlina_spr. V první úrovni země vykreslí sprit s trávou, a zbytek zaplní hlínou.

tráva - GameMaker - Efekty
Hlína - GameMaker - Efekty
vyska=200;
for(i = 0 ; i < room_width;i += 48)
   {
   draw_sprite (trava_spr,0,i,vyska);
   }
for(s=(vyska) + 48; s < room_height;s += 48)
   {
       for(e=0;e < room_width;e += 48)
       {
       draw_sprite(hlina_spr,0,e,s);
       }
   }

Proměnná vyska představuje výšku, od které se začne země generovat. Můžete použít i sprity jiné velikosti, stačí jenom upravit velikost 48 v kodu na vlastní. Stejně tak můžete přímo vytvořit a vykreslit sprit terénu, místo generování.

Aby byl výsledný sprit terénu průhledný, musíme do levého dolního rohu vykreslit bílou tečku určující průhlednou barvu.

draw_set_color(c_white);
draw_point(0,room_height-1);

Pro ukončení vykreslování do povrchu použijeme

surface_reset_target();

Nakonec z tohoto povrchu vytvoříme sprite a nastavíme pozici objektu na 0, aby měl terén správné kolize.

global.ground_spr=sprite_create_from_surface;

(global.ground,0,0,room_width,room_height,1,0,0,0);
 x=0;
 y=0;

V eventu Create je to všechno. Teď se přesuneme do eventu Step, kde zajistíme přiřazování spritu terénu k objektu surf_obj.

sprite_index=global.ground_spr

Nakonec přidáme do Draw eventu samotné vykreslení terénu:

if sprite_exists("global.round_spr")
draw_sprite(global.ground_spr,0,0,0);

Podmínka zaručuje, že se vykreslí jenom když existuje.

Vykreslení terénu je hotové. Měl by vypadat nějak takto:

screen1 - GameMaker - Efekty

Ničení

Zbývá dodělat to nejdůležitější, ničení terénu. K tomuto účelu vytvoříme objekt, který do země udělá díru a zničí se. Nazveme ho třeba dira1_obj. Do eventu Create vložíme kod:

surface_set_target(global.ground);
draw_set_color(c_white);
draw_circle(x,y,30,0);
surface_reset_target();

Tento kod přepne režim vykreslování opět na povrch, a vykreslí do něj bílý kruh. Protože bílá je v povrchu průhledná, vznikne díra. Takto se dá vykreslovat i jiné bílé tvary a sprity.

Nakonec nahradíme sprit terénu za nový a objekt odstraníme:

sprite_delete(global.ground_spr);
 global.ground_spr=sprite_create_from_surface(global.ground,0,0,room_width, room_height,1,0,0,0);
 instance_destroy();

Pro test můžeme vytvořit objekt rakety raketa_obj, která po dopadu udělá díru. V creatu nastavíme gravitaci

gravity=0.8;

A při kolizi s surf_obj

instance_create(x,y,dira1_obj);
instance_destroy();

Rakety se můžou vytvářet levým tlačítkem myši, v surf_obj (nebo vlastním objektu) přidáme do Stepu:

if mouse_check_button_pressed(mb_left);
instance_create(mouse_x,mouse_y,raketa_obj);

Hotovo, tady je výsledek

screen2 - GameMaker - Efekty

 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 429x (320.45 kB)
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í:
3 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