IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

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.

tráva - Game maker - Efekty
hlina - Game maker - 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);
       }
   }

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:

screen1 - Game maker - Efekty

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

screen2 - Game maker - Efekty

 

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

 

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