Tutoriál na tvorbu 3D stříleček 3 - Zlepšujeme zážitek
(Napsal Mark Overmars - (C) YoYo Games Ltd, pro itnetwork.cz přeložil sdraco)
V této části se zaměříme na vylepšení "hry", kterou jsme si minule vytvořili. Jako první ji uděláme rozmanitější a to tím, že přidáme různé druhy zdí. Dále vylepšíme návrh levelu. Abychom vylepšili vizuální dojem (a přidali trochu tajemna), přidáme do světa mlhu. A nakonec vylepšíme pohyb světem.
Více druhů zdí
Svět, který jsme vytvořili, je poněkud nudný. Všechny zdi vypadají stejně. Nejen, že je to nudné, ale dokonce je i pro hráče obtížné se v takovém světě vůbec orientovat. Toto je špatně navržená hra (pokud to tedy nebyl úmysl). Je více uživatelsky přívětivé, aby si hráč mohl jednoduše pamatovat kde je a odkud přišel.
Řešení problému je velmi jednoduché. Přidáme do hry několik dalších textur a k nim další objekty zdí. Budou naprosto stejné jako ty předchozí, jen v Create události budou mít přiřazenou jinou texturu. Nezapomeňte všem těmto objektům nastavit jako parrent obj_wall_basic. S použitím různě obarvených spritů pro různé zdi je jednodušší levely vytvářet. (Všimněte si, že tyto sprity nejsou použity ve hře, ale jsou zobrazeny v levelech.)
Lepší návrh levelů
Současný level má mnoho problémů. Zaprvé jsou tam vidět zdi, které jsou velmi tenké, takže můžeme vidět jejich obě strany. Tomu bychom se měli vyhnout. Zadruhé jsme se snažili zaplnit celý prostor místnostmi. Přesto, že je to běžné pro skutečné budovy, není to moc dobré pro hry. Abychom dosáhli zajímavých překvapení, je lepší mít menší množství místností (prostranství) propojené chodbami. Přidáním zatáček do chodeb docílíme toho, že zredukujeme část světa, kterou najednou hráč vidí. To zvýší pocit nebezpečí. Nikdy nevíte, co číhá za dalším rohem. (Jak uvidíme níže, je tu ještě jeden důvod pro tvorbu levelů s méně místnostmi. Můžeme díky tomu urychlit vykreslování, protože stačí vykreslovat jen část levelu).
Pro vytvoření levelů s méně využitým prostorem automaticky prostoru potřebujeme více. Proto trochu zvýšíme velikost místnosti. Abychom zároveň nezměnili velikost okna, použijeme view s velikostí, jakou chceme. Na pozici view v místnosti nezáleží, protože si stejně projekci nastavujeme sami. Tady je obrázek z části prvního levelu. Různě barevné zdi označují různé textury. Novou hru naleznete v souboru fps2.gmk.
Přidání mlhy
Abychom dosáhli děsivějšího dojmu, můžeme do hry přidat mlhu. Efekt mlhy způsobuje, že vzdálené objekty vypadají tmavěji, než ty blíže (nebo světleji, záleží na barvě mlhy). Když je objekt opravdu daleko, stane se neviditelným. Mlha dodává hře atmosféru, lepší dojem z hloubky a vzdálenosti a můžeme díky ní přestat vykreslovat vzdálené objekty, což hru urychlí. Pro zapnutí mlhy jen přidáme následující řádku do Execute code v Create události objektu player (po nastavování 3D).
d3d_set_fog(true,c_black,10,300);
To zapne mlhu s černou barvou, začínající ve vzdálenosti 10 a přecházející do kompletně černé ve vzdálenosti 300. (Uvědomte si, že některé grafické karty mlhu nepodporují. Bude lepší, když na ní vaše hra nebude závislá). Se zapnutou mlhou bude svět vypadat nějak takto:
Lepší pohyb
Zbývá vylepšit pohyb. Když se srazíte s objektem, zastavíte se. To není moc hezké a díky tomu je průchod chodbou obtížný. Když se srazíte se zdí v malém úhlu, měli byste po ní spíše klouzat než se zastavit. Abychom toho docílili, musíme udělat nějaké změny. Jako první už nebudeme dělat zdi solid (pevné). Když jsou objekty solid, nemůžeme přesně kontrolovat, co se děje ve chvíli kolize, protože to za nás dělá systém. My ale chceme úplnou kontrolu. Proto žádný z objektů zdí nesmí být solid. V události kolize vložíme akci Execute code s následujícím kusem kódu:
{ x = xprevious; y = yprevious; if (abs(hspeed) >= abs(vspeed) && not place_meeting(x+hspeed,y,obj_wall_basic)) { x += hspeed; exit;} if (abs(vspeed) >= abs(hspeed) && not place_meeting(x,y+vspeed,obj_wall_basic)) { y += vspeed; exit;} speed = 0; }
Měli byste si kód pročíst. Na prvních 2 řádcích vrátíme hráče zpět na původní místo (abychom zabránili kolizi). Dále zjistíme, zda se můžeme hráče posunout jen horizontálně (klouže po horizontální zdi). Toto uděláme jen tehdy, pokud je horizontální rychlost vyšší, než vertikální. Pokud je na horizontální pozici pro klouzání volno, přemístíme se tam. Dále zkusíme to samé s klouzáním vertikálně. Pokud oboje selže, nastavíme rychlost na 0 a tím se zastavíme.
Další změnou, kterou uděláme, bude podpora chůze a běhu. Když hráč stiskne klávesu <Shift>, bude se pohybovat rychleji. Dosáhneme toho tak, že v událostech Keyboard <Up> a <Down> otestujeme, zda je <Shift> stisknuto a pokud ano, povolíme vyšší rychlost:
{ var maxspeed; if keyboard_check(vk_shift) maxspeed = 3 else maxspeed = 1.5; if (speed < maxspeed ) speed = min(maxspeed, speed+0.4); }
Poslední nedostatek je, že většina stříleček podporuje strafování, což jsou úkroky do strany. Použijeme pro to klávesy <z> a <x>. Pohyb by měl být kolmý na současný směr hráče. Pro klávesu <z> bude kód vypadat takto:
{ var xn,yn; xn = x - sin(direction*pi/180); yn = y - cos(direction*pi/180); if not place_meeting(xn,yn,obj_wall_basic) { x = xn; y = yn; } }
Stejný kód bude i pro klávesu <x>. Hru si můžete pro efekt vyzkoušet v souboru fps2.gmk níže.
Stáhnout
Stažením následujícího souboru souhlasíš s licenčními podmínkami
Staženo 557x (281.43 kB)
Aplikace je včetně zdrojových kódů v jazyce GameMaker