Tutoriál na tvorbu 3D stříleček 7 - Podlahy a dveře

Ostatní jazyky GameMaker 3D hry Tutoriál na tvorbu 3D stříleček 7 - Podlahy a dveře

(Napsal Mark Overmars - (C) YoYo Games Ltd, pro devbook.cz přeložil sdraco)

V této části prodiskutujeme možná vylepšení, která byste jistě do hry chtěli přidat.

Ořezávání (Clipping)

Při průchodu 3D světem vidíte jen jeho malou část. Naneštěstí systém neví, kterou část vidíte. Takže jsou vykreslovány všechny objekty (minimálně ty před vámi). To je trochu plýtvání časem a i na rychlých grafických kartách to vede k nízkému FPS a to hlavně ve velkých roomech. Všechny 3D hry si musí tento problém uvědomit a snažit se vykreslovat jen to, co je nezbytně nutné.

Jedna možnost, jak toto zajistit, je tvořit malé levely. Můžete použít speciální místa jako teleporty pro přechod mezi jednotlivými levely. Můžete to také udělat tak, že si toho uživatel ani nevšimne. Můžete například udělat klikatou chodbu, kterou dáte do obou levelů. V polovině chodby přeskočíte z jednoho levelu do druhého. Protože hráč nevidí zbytek levelu, nevšimne si toho. (V tomto případě byste měli dát roomům vlastnost persistent, aby se hráč mohl vrátit na předchozí místo.) Stejného efektu můžete docílit pomocí dveří a výtahů.

Druhá možnost je ořezávání. S ořezáváním vykreslíme jen ty objekty, které jsou blízko k hráči. Kdykoli budeme něco vykreslovat, nejdříve se podíváme, zda je hráč dostatečně blízko. Pro urychlení si uložíme současnou pozici hráče do globálních proměnných camx a camy. Dále do události Draw každé zdi, rostliny, příšery a dalších objektů umístíme následující test:

if (point_distance(x,y,global.camx,global.camy) > 240) exit;

Takže pokud je vzdálenost od kamery velká, nebudeme dělat nic. Hodnota 240 záleží na rozvržení našeho roomu. Lepší je se ujistit, že neexistují žádná místa, kde by hráč viděl do dlouhých chodeb. Také dejte místnosti černé pozadí, protože kdyby někde bylo místo, kterým se dá podívat ven z levelu, bude barva ladit s naší černou mlhou. Hru naleznete spolu s touto a několika dalšími změnami v souboru fps6.gmk. Pokud máte pomalejší grafickou kartu, jistě bude fungovat mnohem lépe, než ta předešlá. (Pokud máte rychlou grafickou kartu, zkuste změnit room speed, abyste viděli rozdíl).

Ve velkých místnostech s mnoha objekty je efekt ještě lépe viditelný. Můžete ještě chytřeji zjistit, které části se mají vykreslovat a které ne. Komerční hry obsahují techniky v branách, kde si pro každou oblast ve hře uloží, které oblasti jsou z ní viditelné a vykresluje jen ty. To ještě více vylepší rychlost.

Dveře

Hezkým doplňkem je přidání dveří mezi místnosti a chodby. Může to při hraní hry vytvořit dodatečné napětí. Co je za dveřmi? Budou na druhé straně příšery? Pomocí tlačítek, které otevírají určité dveře, můžete hráče přinutit procházet levelem určitým způsobem.

Přidáme tedy do naší hry nějaké jednoduché dveře: dveře, které se rozjedou do stran, když do nich vystřelíte. Dveře vyjíždějící nahoru a dolů jsou také jednoduché. Otočné dveře jsou komplikovanější, protože se musíte vypořádat se situací, kdy bude dveře blokovat příšera nebo sám hráč.

Pro přidání dveří budeme nejprve potřebovat texturu. Přidáme ji jako background, stejně jako u zdí. Opět budeme potřebovat sprite, který bude reprezentovat dveře v roomu a bude se starat o kolizi, stejně jako u zdí. Vytvoříme si 2 objekty (je to jednodušší než použít jen jeden). První objekt jsou zavřené dveře. Vypadají úplně stejně, jako horizontální zeď, jen v události Destroy se tvoří instance rozjíždějících se dveří. Opět mu dáme jako parrent basic wall, aby přes něj hráč a příšery neprocházeli.

Druhý objekt jsou rozjíždějící se dveře (sliding door). Vypadají jako zavřené dveře, ale v události Create mu nastavíme horizontální rychlost na 1. Také nastavíme alarm na 32 a v alarmu nastavíme rychlost na 0 (také bychom mohli objekt zničit). Nakonec ve step události updatujeme pozice x1 a x2 aby se textury vykreslily na správném místě. Tím jsme dokončili vyjíždění zdí.

Musíme také zajistit, aby se dveře otevíraly. Rozhodli jsme se je otevřít, když na ně hráč vystřelí. Za tímto účelem do události <Space> objektu pistole změníme poslední řádky kódu tak, aby vypadaly takto:

if (ii.object_index == obj_barrel) || (ii.object_index == obj_door)
   with (ii) instance_destroy();
break;

To je vše. Do místnosti si vložte několik strategických dveří. Ujistěte se, že se mohou bezpečně zasunout do zdí, takže je nedávejte ke konci stěn. Výsledek naleznete v souboru fps6.gmk. Samozřejmě aby byla hra zajímavější, měli byste přidat i vertikální dveře a možná i dveře, které se posouvají zleva doprava.

Podlahy a stropy

Ve hře jsme vytvořili jen jednu velkou podlahu a jeden velký strop. Přesto, že je to jednoduché, je to poněkud nudné. Můžeme to lehce napravit. Můžete vytvořit mnoho různých textur pro podlahy a stropy a s nimi objekty, které je budou vykreslovat. Jsou to velmi jednoduché objekty bez nějakého chování (pokud nechcete, aby se pohlahy nebo stropy pohybovaly). Vložíte je na správné pozice v místnosti a jste hotoví. Abyste jich nepotřebovali tolik, je lepší tyto objekty dělat větší.

Můžete dát stropům různou výšku. Tímto způsobem vytvoříte ve svém světě vysoké a nízké oblasti. Ujistěte se, že i zdi jsou dostatečně vysoké. I podlahám je možné dát různou výšku, ale to je již komplikovanější. Musíte totiž přizpůsobit i výšku hráče, příšer a dalších objektů, které po zemi chodí nebo na ni leží. To vyžaduje nějaké dodatečné výpočty. A na základě rozdílu ve výškách se musíte rozhodnout, zda hráč může přejít z jednoho povrchu na druhý.

Když jsme vytvořili tohle všechno, už nebude těžké vytvořit zapovězené části podlahy. Například můžete dát texturu lávy na část podlahy (může být dokonce i animovaná). Abychom hráči zabránili do lávy vstoupit, nejjednodušší bude vložit kolem ní neviditelnou zeď.

Tyto možnosti jsme do ukázkové hry neimplementovali, ale měli byste být schopni s nimi sami experimentovat.

Jak z toho vytvořit hru

Co jsme vytvořili není plnohodnotná hra. Ale dává to hře solidní základ. Měli bychom přidat mnoho různých příšer s různým chováním, různými texturami a tím dodat hře zajímavost. Také přidat nové zbraně, zvuky a další objekty. Pečlivý návrh hry je také důležitý. Uvědomte si, že to všechno bude v jednu chvíli vyžadovat mnoho uložených textur. Ale pokud je všechny najednou nepoužíváte, můžete jednoduše využít funkcí nebo akcí k nahrazení spritů a obrázků ze souboru. To má například výhodu v tom, že počet různých objektů zdí je omezený. V dalším levelu jednoduše použijete ty samé objekty, ale protože textury nahradíte, budou vypadat jinak.


 

Stáhnout

Staženo 1269x (536.01 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker

 

  Aktivity (1)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (3 hlasů) :
55555


 


Miniatura
Všechny články v sekci
GameMaker - 3D hry
Miniatura
Následující článek
Jak na modely z Blenderu do GM

 

 

Komentáře
Zobrazit starší komentáře (32)

Avatar
dave
Neregistrovaný
Avatar
dave:

Chtel jsem udělat nějakou hru ale nevim v čem furt koukam na gamemaker, ale tam potrebuju plnou verzi na 3D a v tom je problem a v petrovi se mi moc dělat nechce ani v 3d rad tak nevim. poradte prosim někdo.

 
Odpovědět 27.3.2013 19:50
Avatar
David Čápka
Tým ITnetwork
Avatar
David Čápka:

Nad tebou se to řeší, chtělo by to číst.

Odpovědět 8.5.2013 17:42
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na dave
David Čápka:

Buď si ho musíš koupit nebo se naučit třeba XNA, na to tu jsou tutoriály také a je zdarma.

Odpovědět 8.5.2013 17:42
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
dave
Neregistrovaný
Avatar
dave:

Dekuji popřemýšlím nad tím XNA.

 
Odpovědět 10.5.2013 21:56
Avatar
Daniel Vítek
Tým ITnetwork
Avatar
Daniel Vítek:

Ahoj,
vlevo v menu si dáš Global Game Settings, je to druhá záložka ;)

 
Odpovědět 16.6.2013 15:18
Avatar
DacanCZ
Neregistrovaný
Avatar
DacanCZ:

CUS prosím jak dát do 3D hry pozadíM třebanebeatd...

 
Odpovědět 19.9.2013 20:02
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na DacanCZ
David Čápka:

Většinou uděláš kouli okolo hráče s texturou, případně krychli. Říká se tomu Skybox / Sky sphere. Útvar se hýbe s hráčem a vypadá to, že nebe stojí na místě.

Odpovědět 25.9.2013 16:59
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
jurka.stejskal:

Když zemřu, tak jsou průhledné zdi. Nevíte co s tím?

 
Odpovědět 20.6.2014 17:07
Avatar
Tomas
Člen
Avatar
Tomas :

keď použijem aby som mohol myškou ovládať pohyb
tak sa my steny a ostatné veci hýbu pod podlahu a nad strop
ako by som to mohol urobiť aby stáli? aj keď chcem ísť pohľadom hore a a dole tak mi to híbe iba tie steny a nie pohľad
čo mám dať do objektu wall ?

 
Odpovědět 9. dubna 20:53
Avatar
Tomas
Člen
Avatar
Tomas :

ešte neviem ako by som mohol urobiť aby sa dali zatvárať dvere
skúsil som urobiť obj_door_sliding2
do obj_gun som pridal
var xx, yy, ii, zz;
if (ii.object_index == obj_barrel) || (zz.object_index == obj_door_sliding)
with (ii) instance_destroy();
break;
a do toho objektu sliding door 2
som pridal to iste ako do sliding door 1
ale dal som alarm 1
a ešte som pridal do objektu sliding door 1
ze ak sa zničí vytvorí sa objekt sliding door 2

 
Odpovědět 10. dubna 18:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 42. Zobrazit vše