Tutoriál na tvorbu 3D stříleček 3 - Zlepšujeme zážitek

Ostatní jazyky GameMaker 3D hry Tutoriál na tvorbu 3D stříleček 3 - Zlepšujeme zážitek

(Napsal Mark Overmars - (C) YoYo Games Ltd, pro devbook.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.

lepší návrh 3D místnosti

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:

3D Mlha v Game Makeru

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ženo 533x (281.43 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 (2 hlasů) :
55555


 



 

 

Komentáře

Avatar
adas
Neregistrovaný
Avatar
adas:

hadas;);)

 
Odpovědět 2.7.2012 23:27
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovědět 3.7.2012 1:03
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
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 2 zpráv z 2.