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.


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:

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

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