Zničiteľný terén pomocou surface
K pochopeniu je potreba vedieť aspoň základy GML a povrchy (surfaces). Pokúsim sa je trochu priblížiť, ale k tomu slúžia iné návody. Surface umožňujú vykresľovať nepriamo na obrazovku, do vlastného neviditeľného plátna. Toto plátno sa dá neskôr použiť v hre.
Vytvorenie terénu
Najskôr vytvoríme objekt, ktorý nazveme treba surf_obj. Ten sa bude starať o terén. Do eventu Create pridáme nasledujúce kody:
global.ground=surface_create(room_width,room_height);
Vytvorí nový surface o veľkosti roomu
surface_set_target(global.ground); draw_clear(c_white);
Funkcia surface_set_target aktivuje vykresľovanie do Surface. draw_clear vyplní nový surface zvolenou farbou. Surface sa nečistí automaticky, preto je nutné používať draw_clear pred ich použitím.
Teraz môžeme do novo vytvoreného povrchu vykresľovať. Pre vygenerovanie krajiny po celom roomu môžete použiť jednoduchý kod, ktorý používa 2 sprity o veľkosti 48x48 s názvami trava_spr a hlina_spr. V prvej úrovni krajiny vykreslí sprit s trávou, a zvyšok zaplní hlinou.
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); } }
Premenná vyska predstavuje výšku, od ktorej sa začne krajiny generovať. Môžete použiť aj sprity iné veľkosti, stačí len upraviť veľkosť 48 v kodu na vlastné. Rovnako tak môžete priamo vytvoriť a vykresliť sprit terénu, miesto generovanie.
Aby bol výsledný sprit terénu priehľadný, musíme do ľavého dolného rohu vykresliť bielu bodku určujúci priehľadnú farbu.
draw_set_color(c_white); draw_point(0,room_height-1);
Pre ukončenie vykresľovanie do povrchu použijeme
surface_reset_target();
Nakoniec z tohto povrchu vytvoríme sprite a nastavíme pozíciu objektu na 0, aby mal terén správne kolízie.
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šetko. Teraz sa presunieme do eventu Step, kde zaistíme priraďovanie Spritu teréne k objektu surf_obj.
sprite_index=global.ground_spr
Nakoniec pridáme do Draw eventu samotnej vykreslenie terénu:
if sprite_exists("global.round_spr") draw_sprite(global.ground_spr,0,0,0);
Podmienka zaručuje, že sa vykreslí len keď existuje.
Vykreslenie teréne je hotové. Mal by vyzerať nejako takto:
Ničenia
Zostáva dorobiť to najdôležitejšie, ničenia teréne. Na tento účel vytvoríme objekt, ktorý do krajiny urobí dieru a zničí sa. Nazveme ho treba 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 prepne režim vykresľovania opäť na povrch, a vykreslí doň biely kruh. Pretože biela je v povrchu priehľadná, vznikne diera. Takto sa dá vykresľovať aj iné biele tvary a sprity.
Nakoniec nahradíme sprit terénu za nový a objekt odstránime:
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();
Pre test môžeme vytvoriť objekt rakety raketa_obj, ktorá po dopade urobí dieru. V CREAT nastavíme gravitáciu
gravity=0.8;
A pri kolízii s surf_obj
instance_create(x,y,dira1_obj); instance_destroy();
Rakety sa môžu vytvárať ľavým tlačidlom myši, v surf_obj (alebo vlastným objektu) pridáme do Stepu:
if mouse_check_button_pressed(mb_left);
instance_create(mouse_x,mouse_y,raketa_obj);
Hotovo, tu je výsledok
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 429x (320.45 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker