Pravidla Ucet
Nepřihlášen

Článek

Menu

Zničitelný terén pomocí surface
Napsal: Satik64
Přidáno: 21.09. 2010

Návod na jednoduchou zničitelnou zem pomocí surface, tak jak ji můžete znát z Worms.

Ikdyž je příkladů na zničitelný terén hodně, tady v magazinu chybí, proto jsem se rozhodl podělit se o moje řešení.


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 sprit 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

Doufám že se návod líbil, a byl aspoň trochu srozumitelný :D Nakonec ještě editovatelný gmk soubor, kde je všechno ve skriptu

Stáhnout GMK příklad

Ostatní díly seriálu:
Klíčová slova: zničitelný terén surface
 

Komentáře:

Napsal: Pan X
Přidáno: 12.11. 2010

zdar kuči už usi nebude učit

a je nas tu 4

Trvalý odkaz

Napsal: Pan X
Přidáno: 05.11. 2010

co je noveho ve skole (otaznik)

Trvalý odkaz

Napsal: Satik64
Přidáno: 01.10. 2010

Dík moc všem, jeden pěkný návod na surfacy už je na foru, http://www.forum.velkejchytrak.cz/viewtopic.php?f=20&t=14580

Ale můžu někdy zkusit udělat něco podobného sem

Trvalý odkaz

Napsal: NicharCZ
Přidáno: 01.10. 2010

No, mohl bys udělat tutoriál na základy surfaces, vysvětlení, základní funkce a podobně. Jsi v tom vážně dobrý.. :)

Trvalý odkaz

Přidáno: 01.10. 2010

tak toto je jak dar z nebes ... toto sem hledal docela dlouho a nasel jsem to ... je to jednoduche a poskytuje to zakladni informace jak pracovat se sufraces

Trvalý odkaz

Napsal: Pan X
Přidáno: 01.10. 2010

to mozna i viuziji

Trvalý odkaz

Napsal: Pan X
Přidáno: 01.10. 2010

hezké

Trvalý odkaz

Napsal: chuckeles
Přidáno: 01.10. 2010

Myslel som, že to je ťažšie. Super tut!

Trvalý odkaz

Napsal: Kmeto
Přidáno: 22.09. 2010

Super tut :)

Trvalý odkaz

Napsal: DDL Blue
Přidáno: 21.09. 2010

Na to dá říct jen jedno... dobře ty :D

Trvalý odkaz

Napsal: NicharCZ
Přidáno: 21.09. 2010

Fantastický tutoriál.. :) Bravo.. :)))

Trvalý odkaz

Napsal: Satik64
Přidáno: 21.09. 2010

Dik :)

Trvalý odkaz

Napsal: Quadman
Přidáno: 21.09. 2010

Tento tutorial sa ti fakt podaril :) chválim

Trvalý odkaz

Velkej Chytrák
Copyright (c) 2001-2010