IT rekvalifikácia. Seniorní programátori zarábajú až 6 000 €/mesiac a rekvalifikácia je prvým krokom. Zisti, ako na to!

Tutoriál na tvorbu 3D strieľačiek 3 - Zlepšujeme zážitok

(Napísal Mark Overmars - (C) YoYo Games Ltd, pre itnetwork.cz preložil sdraco)

V tejto časti sa zameriame na vylepšenie "hry", ktorú sme si minule vytvorili. Ako prvý ju urobíme rozmanitejšie a to tým, že pridáme rôzne druhy múrov. Ďalej vylepšíme návrh levelu. Aby sme vylepšili vizuálny dojem (a pridali trochu tajomna), pridáme do sveta hmlu. A nakoniec vylepšíme pohyb svetom.

Viac druhov múrov

Svet, ktorý sme vytvorili, je trochu nudný. Všetky steny vyzerajú rovnako. Nielen, že je to nudné, ale dokonca je aj pre hráčov ťažké sa v takomto svete vôbec orientovať. Toto je zle navrhnutá hra (pokiaľ to teda nebol úmysel). Je viac užívateľsky prívetivé, aby si hráč mohol jednoducho pamätať kde je a odkiaľ prišiel.

Riešenie problému je veľmi jednoduché. Pridáme do hry niekoľko ďalších textúr ak nim ďalšie objekty múrov. Budú úplne rovnaké ako tie predchádzajúce, len v Create udalosti budú mať priradenú inú textúru. Nezabudnite všetkým týmto objektom nastaviť ako parrent obj_wall_basic. S použitím rôzne zafarbených spritov pre rôzne múru je jednoduchšie levely vytvárať. (Všimnite si, že tieto sprity nie sú použité v hre, ale sú zobrazené v leveloch.)

Lepší návrh levelov

Súčasný level má veľa problémov. Po prvé sú tam vidieť múry, ktoré sú veľmi tenké, takže môžeme vidieť ich obe strany. Tomu by sme sa mali vyhnúť. Po druhé sme sa snažili zaplniť celý priestor miestnosťami. Napriek tomu, že je to bežné pre skutočné budovy, nie je to moc dobré pre hry. Aby sme dosiahli zaujímavých prekvapení, je lepšie mať menšie množstvo miestností (priestranstvo) prepojené chodbami. Pridaním zákrut do chodieb docielime toho, že zredukujeme časť sveta, ktorú zrazu hráč vidí. To zvýši pocit nebezpečenstva. Nikdy neviete, čo číha za ďalším rohom. (Ako uvidíme nižšie, je tu ešte jeden dôvod pre tvorbu levelov s menej miestnosťami. Môžeme vďaka tomu urýchliť vykresľovanie, pretože stačí vykresľovať len časť levelu).

Pre vytvorenie levelov s menej využitým priestorom automaticky priestoru potrebujeme viac. Preto trochu zvýšime veľkosť miestnosti. Aby sme zároveň nezmenili veľkosť okna, použijeme view s veľkosťou, akú chceme. Na pozícii view v miestnosti nezáleží, pretože si rovnako projekciu nastavujeme sami. Tu je obrázok z časti prvého levelu. Rôzne farebné steny označujú rôzne textúry. Novú hru nájdete v súbore fps2.gmk.

lepší návrh 3D miestnosti - Game maker - 3D hry

Pridanie hmly

Aby sme dosiahli děsivějšího dojmu, môžeme do hry pridať hmlu. Efekt hmly spôsobuje, že vzdialené objekty vyzerajú tmavšie, než tie bližšie (alebo svetlejšie, záleží na farbe hmly). Keď je objekt naozaj ďaleko, stane sa neviditeľným. Hmla dodáva hre atmosféru, lepší dojem z hĺbky a vzdialenosti a môžeme vďaka nej prestať vykresľovať vzdialené objekty, čo hru urýchli. Pre zapnutie hmly len pridáme nasledujúce riadku do Execute code v Create udalosti objekte player (po nastavovanie 3D).

d3d_set_fog(true,c_black,10,300);

To zapne hmlu s čiernou farbou, začínajúci vo vzdialenosti 10 a prechádzajúci do kompletne čiernej vo vzdialenosti 300. (Uvedomte si, že niektoré grafické karty hmlu nepodporujú. Bude lepšie, keď na nej vaša hra nebude závislá). So zapnutou hmlou bude svet vyzerať nejako takto:

3D Hmla v Game Makeru - Game maker - 3D hry

Lepší pohyb

Zostáva vylepšiť pohyb. Keď sa zrazíte s objektom, zastavíte sa. To nie je moc pekné a vďaka tomu je priechod chodbou obtiažny. Keď sa zrazíte s múrom v malom uhle, mali by ste po nej skôr kĺzať než sa zastaviť. Aby sme to docielili, musíme urobiť nejaké zmeny. Ako prvý už nebudeme robiť múru solid (pevné). Keď sú objekty solid, nemôžeme presne kontrolovať, čo sa deje vo chvíli kolízie, pretože to za nás robí systém. My ale chceme úplnú kontrolu. Preto žiadny z objektov múrov nesmie byť solid. V udalosti kolízie vložíme akciu Execute code s nasledujúcim kusom 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;
}

Mali by ste si kód prečítať. Na prvých 2 riadkoch vrátime hráča späť na pôvodné miesto (aby sme zabránili kolízii). Ďalej zistíme, či sa môžeme hráčov posunúť len horizontálne (kĺže po horizontálnej stene). Toto urobíme len vtedy, ak je horizontálny rýchlosť vyššiu, než vertikálne. Ak je na horizontálnu pozíciu pre kĺzanie voľno, premiestnime sa tam. Ďalej skúsime to isté s kĺzaním vertikálne. Ak oboje zlyhá, nastavíme rýchlosť na 0 a tým sa zastavíme.

Ďalšou zmenou, ktorú urobíme, bude podpora chôdze a behu. Keď hráč stlačí kláves <Shift>, bude sa pohybovať rýchlejšie. Dosiahneme toho tak, že v udalostiach Keyboard <Up> a <Down> otestujeme, či je <Shift> stlačené a ak áno, povolíme vyššiu rýchlosť:

{
  var maxspeed;
  if keyboard_check(vk_shift) maxspeed = 3 else maxspeed = 1.5;
  if (speed < maxspeed ) speed = min(maxspeed, speed+0.4);
}

Posledný nedostatok je, že väčšina strieľačiek podporuje strafování, čo sú úkroky do strany. Použijeme pre to klávesy <z> a <x>. Pohyb by mal byť kolmý na súčasný smer hráča. Pre kláves <z> bude kód vyzerať 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; }
}

Rovnaký kód bude aj pre kláves <x>. Hru si môžete pre efekt vyskúšať v súbore fps2.gmk nižšie.


 

Stiahnuť

Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami

Stiahnuté 557x (281.43 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker

 

Všetky články v sekcii
Game maker - 3D hry
Článok pre vás napísal David Hartinger
Avatar
Užívateľské hodnotenie:
Ešte nikto nehodnotil, buď prvý!
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 sa informačné technológie naučil na Unicorn University - prestížnej súkromnej vysokej škole IT a ekonómie.
Aktivity