Tutoriál na tvorbu 3D strieľačiek 7 - Podlahy a dvere
(Napísal Mark Overmars - (C) YoYo Games Ltd, pre itnetwork.cz preložil sdraco)
V tejto časti prediskutujeme možná vylepšenia, ktoré by ste určite do hry chceli pridať.
Orezávanie (Clipping)
Pri prechode 3D svetom vidíte len jeho malú časť. Nanešťastie systém nevie, ktorú časť vidíte. Takže sú vykresľované všetky objekty (minimálne tie pred vami). To je trochu plytvanie časom a aj na rýchlych grafických kartách to vedie k nízkemu FPS a to hlavne vo veľkých Room. Všetky 3D hry si musia tento problém uvedomiť a snažiť sa vykresľovať len to, čo je nevyhnutne nutné.
Jedna možnosť, ako toto zabezpečiť, je tvoriť malé levely. Môžete použiť špeciálne miesta ako teleporty pre prechod medzi jednotlivými levelmi. Môžete to tiež urobiť tak, že si to používateľ ani nevšimne. Môžete napríklad urobiť kľukatou chodbu, ktorú dáte do oboch levelov. V polovici chodby preskočíte z jedného levelu do druhého. Pretože hráč nevidí zvyšok levelu, nevšimne si toho. (V tomto prípade by ste mali dať roomům vlastnosť persistent, aby sa hráč mohol vrátiť na predchádzajúcu miesto.) Rovnaký efekt môžete docieliť pomocou dverí a výťahov.
Druhá možnosť je orezávanie. S orezávaním vykreslíme len tie objekty, ktoré sú blízko k hráčovi. Kedykoľvek budeme niečo vykresľovať, najskôr sa pozrieme, či je hráč dostatočne blízko. Pre urýchlenie si uložíme súčasnú pozíciu hráča do globálnych premenných camx a Camy. Ďalej do udalosti Draw každej stene, rastliny, príšery a ďalších objektov umiestnime nasledujúci test:
if (point_distance(x,y,global.camx,global.camy) > 240) exit;
Takže ak je vzdialenosť od kamery veľká, nebudeme robiť nič. Hodnota 240 záleží na rozvrhnutie nášho roomu. Lepšie je sa uistiť, že neexistujú žiadne miesta, kde by hráč videl do dlhých chodieb. Tiež dajte miestnosti čierne pozadie, pretože keby niekde bolo miesto, ktorým sa dá pozrieť von z levelu, bude farba ladiť s našou čiernou hmlou. Hru nájdete spolu s touto a niekoľkými ďalšími zmenami v súbore fps6.gmk. Ak máte pomalšiu grafickú kartu, určite bude fungovať oveľa lepšie, než tá predošlá. (Ak máte rýchlu grafickú kartu, skúste zmeniť room speed, aby ste videli rozdiel).
Vo veľkých miestnostiach s mnohými objektmi je efekt ešte lepšie viditeľný. Môžete ešte chytrejšie zistiť, ktoré časti sa majú vykresľovať a ktoré nie. Komerčné hry obsahujú techniky v bránach, kde si pre každú oblasť v hre uloží, ktoré oblasti sú z nej viditeľné a vykresľuje len tie. To ešte viac vylepší rýchlosť.
Dvere
Pekným doplnkom je pridanie dverí medzi miestnosti a chodby. Môže to pri hraní hry vytvoriť dodatočné napätie. Čo je za dverami? Budú na druhej strane príšery? Pomocou tlačidiel, ktoré otvárajú určité dvere, môžete hráčov prinútiť prechádzať levelom určitým spôsobom.
Pridáme teda do našej hry nejaké jednoduché dvere: dvere, ktoré sa rozbehnú do strán, keď do nich vystrelíte. Dvere vychádzajúci hore a dole sú tiež jednoduché. Otočné dvere sú komplikovanejšie, pretože sa musíte vysporiadať so situáciou, kedy bude dvere blokovať príšera alebo sám hráč.
Pre pridanie dverí budeme najprv potrebovať textúru. Pridáme ju ako pozadie, rovnako ako u múrov. Opäť budeme potrebovať sprite, ktorý bude reprezentovať dvere v roomu a bude sa starať o kolízii, rovnako ako u múrov. Vytvoríme si 2 objekty (je to jednoduchšie než použiť len jeden). Prvý objekt sú zatvorené dvere. Vyzerajú úplne rovnako, ako horizontálna múr, len v udalosti Destroy sa tvoria inštancie rozjíždějící sa dverí. Opäť mu dáme ako parrent basic wall, aby cez neho hráč a príšery neprechádzali.
Druhý objekt sú začínajúcim dvere (sliding door). Vyzerajú ako zatvorené dvere, ale v udalosti Create mu nastavíme horizontálna rýchlosť na 1. Tiež nastavíme alarm na 32 a v alarmu nastavíme rýchlosť na 0 (tiež by sme mohli objekt zničiť). Nakoniec vo step udalosti updatuje pozície x1 a x2 aby sa textúry vykreslili na správnom mieste. Tým sme dokončili vychádzaní múrov.
Musíme tiež zabezpečiť, aby sa dvere otvárali. Rozhodli sme sa ich otvoriť, keď na ne hráč vystrelí. Za týmto účelom do udalosti <Space> objektu pištole zmeníme posledné riadky kódu tak, aby vyzerali takto:
if (ii.object_index == obj_barrel) || (ii.object_index == obj_door) with (ii) instance_destroy(); break;
To je všetko. Do miestnosti si vložte niekoľko strategických dverí. Uistite sa, že sa môžu bezpečne zasunúť do stien, takže je nedávajte ku koncu stien. Výsledok nájdete v súbore fps6.gmk. Samozrejme aby bola hra zaujímavejšia, mali by ste pridať aj vertikálne dvere a možno aj dvere, ktoré sa posúvajú zľava doprava.
Podlahy a stropy
V hre sme vytvorili len jednu veľkú podlahu a jeden veľký strop. Napriek tomu, že je to jednoduché, je to trochu nudné. Môžeme to ľahko napraviť. Môžete vytvoriť mnoho rôznych textúr pre podlahy a stropy as nimi objekty, ktoré ich budú vykresľovať. Sú to veľmi jednoduché objekty bez nejakého správania (ak nechcete, aby sa pohlahy alebo stropmi pohybovali). Vložíte je na správnej pozície v miestnosti a ste hotoví. Aby ste ich nepotrebovali toľko, je lepšie tieto objekty robiť väčšie.
Môžete dať stropom rôznu výšku. Týmto spôsobom vytvoríte vo svojom svete vysoké a nízke oblasti. Uistite sa, že aj steny sú dostatočne vysoké. Aj podlahám je možné dať rôznu výšku, ale to je už komplikovanejšia. Musíte totiž prispôsobiť aj výšku hráča, príšer a ďalších objektov, ktoré po zemi chodia alebo na ňu ležia. To si vyžaduje nejaké dodatočné výpočty. A na základe rozdielu vo výškach sa musíte rozhodnúť, či hráč môže prejsť z jedného povrchu na druhý.
Keď sme vytvorili toto všetko, už nebude ťažké vytvoriť zakázanej časti podlahy. Napríklad môžete dať textúru lávy na časť podlahy (môže byť dokonca aj animovaná). Aby sme hráči zabránili do lávy vstúpiť, najjednoduchšie bude vložiť okolo nej neviditeľnú stenu.
Tieto možnosti sme do ukážkovej hry neimplementovali, ale mali by ste byť schopní s nimi sami experimentovať.
Ako z toho vytvoriť hru
Čo sme vytvorili nie je plnohodnotná hra. Ale dáva to hre solídny základ. Mali by sme pridať veľa rôznych príšer s rôznym správaním, rôznymi textúrami a tým dodať hre zaujímavosť. Tiež pridať nové zbrane, zvuky a ďalšie objekty. Starostlivý návrh hry je tiež dôležitý. Uvedomte si, že to všetko bude v jednej chvíli vyžadovať veľa uložených textúr. Ale ak ich všetky naraz nepoužívate, môžete jednoducho využiť funkcií alebo akcií k nahradenie spritov a obrázkov zo súboru. To má napríklad výhodu v tom, že počet rôznych objektov múrov je obmedzený. V ďalšom leveli jednoducho použijete tie isté objekty, ale pretože textúry nahradíte, budú vyzerať inak.
Stiahnuť
Stiahnutím nasledujúceho súboru súhlasíš s licenčnými podmienkami
Stiahnuté 1398x (536.01 kB)
Aplikácia je vrátane zdrojových kódov v jazyku GameMaker