Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

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

(Napsal Mark Overmars - (C) YoYo Games Ltd, pro itnetwork.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žením následujícího souboru souhlasíš s licenčními podmínkami

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

 

Všechny články v sekci
GameMaker - 3D hry
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
3 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity