}w !"#$%&'()+,-./012345
M ASARYKOVA UNIVERZITA FAKULTA INFORMATIKY
Vyvoj her na platformˇe XNA ´ ˇ A´ PR ACE ´ B AKAL A´ RSK
Tom´asˇ Lamr
Brno, jaro 2007
Prohl´asˇ en´ı ˚ Prohlaˇsuji, zˇ e tato bakal´arˇ sk´a pr´ace je mym ım autorskym ´ puvodn´ ´ d´ılem, kter´e jsem vypracoval samostatnˇe. Vˇsechny zdroje, prameny a literaturu, kter´e jsem pˇri vypracov´an´ı pouˇz´ıval nebo z nich cˇ erpal, v pr´aci rˇ a´ dnˇe cituji ´ s uveden´ım upln´ eho odkazu na pˇr´ısluˇsny´ zdroj.
Vedouc´ı pr´ace: Mgr. Ondˇrej Kraj´ıcˇ ek ii
Podˇekov´an´ı Dˇekuji vedouc´ımu pr´ace Mgr. Ondˇreji Kraj´ıcˇ kovi za umoˇznˇen´ı projektu na vlastn´ı t´ema a cenn´e rady. D´ale dˇekuji cel´e sv´e rodinˇe za jejich celoˇzivotn´ı podporu, pochopen´ı a trpˇelivost, a za to, zˇ e mi umoˇznili studovat. Speci´aln´ı podˇekov´an´ı patˇr´ı V´aclavu Krejˇc´ımu, ktery´ si dal tu pr´aci a vytvoˇril vyteˇ ´ cny´ graficky´ kab´at pro uk´azkovou hru.
iii
Shrnut´ı XNA je nov´a platforma spoleˇcnosti Microsoft, kter´a pˇribliˇzuje vyvoj mo´ ˚ dern´ıch videoher sˇ irˇs´ı veˇrejnosti a ulehˇcuje pr´aci profesion´aln´ım vyvoj´ ´ arˇ um. ˇ Jako prvn´ı zdarma dostupn´a platforma umoˇznuje soubˇezˇ ny´ vyvoj hry jak ´ pro osobn´ı poˇc´ıtaˇce, tak pro hern´ı konzole. C´ılem pr´ace je prozkoum´an´ı XNA platformy a vytvoˇren´ı funkˇcn´ı hry.
iv
Kl´ıcˇ ov´a slova ˇ XNA, C#, XNA Game Studio, Supaplesk, Hry, Videohry, .NET
v
Obsah 1 2
´ Uvod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . XNA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.1 Pˇredstaven´ı XNA . . . . . . . . . . . . . . . . . . . . . . . . . 2.1.1 XNA Game Studio Express . . . . . . . . . . . . . . . 2.1.2 XNA Framework . . . . . . . . . . . . . . . . . . . . . 2.1.3 Express verze a vyvoj pro Xbox360 . . . . . . . . . . . ´ 2.2 Content Pipeline - spr´ava hern´ıch dat . . . . . . . . . . . . . 2.2.1 Spr´ava hern´ıho obsahu v XNA Game Studio Express 2.2.2 Content Importer . . . . . . . . . . . . . . . . . . . . . 2.2.3 Content Processor . . . . . . . . . . . . . . . . . . . . 2.2.4 Spolupr´ace vˇsech souˇca´ st´ı . . . . . . . . . . . . . . . . 2.2.5 Content Manager . . . . . . . . . . . . . . . . . . . . . 2.3 Aplikaˇcn´ı model . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.1 Game . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3.2 GameComponent . . . . . . . . . . . . . . . . . . . . . 2.3.3 DrawableGameComponent . . . . . . . . . . . . . . . 2.4 Vstup od uˇzivatele . . . . . . . . . . . . . . . . . . . . . . . . 2.4.1 Analogovy´ a digit´aln´ı vstup . . . . . . . . . . . . . . . 2.4.2 Hern´ı ovladaˇc . . . . . . . . . . . . . . . . . . . . . . . 2.4.3 Kl´avesnice . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.4 Myˇs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.4.5 Pr´ace se vstupem . . . . . . . . . . . . . . . . . . . . . 2.5 Pr´ace s grafikou . . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.1 2D grafika . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2 3D grafika . . . . . . . . . . . . . . . . . . . . . . . . . 2.5.2.1 Transformace . . . . . . . . . . . . . . . . . . 2.5.2.2 Z´akladn´ı potˇreby pro pr´aci v 3D . . . . . . . 2.5.2.3 World, view a projection matice . . . . . . . 2.5.2.4 Vertex Buffer . . . . . . . . . . . . . . . . . . 2.5.2.5 Effects . . . . . . . . . . . . . . . . . . . . . . 2.5.2.6 Praxe . . . . . . . . . . . . . . . . . . . . . . 2.5.2.7 Index Buffer . . . . . . . . . . . . . . . . . .
3 5 5 5 5 6 6 6 7 8 8 8 8 9 9 9 10 10 10 10 11 11 12 12 13 13 13 13 14 14 15 15 1
2.5.2.8 Modely . . . . . . . . . . . . Pr´ace se zvukem . . . . . . . . . . . . . . . . . 2.6.1 Koncept pr´ace . . . . . . . . . . . . . . 2.6.2 Wave Bank . . . . . . . . . . . . . . . . 2.6.3 Sound Bank . . . . . . . . . . . . . . . 2.6.4 Global settings . . . . . . . . . . . . . 2.6.5 Jak zvuk pˇrehr´at? . . . . . . . . . . . . 2.7 Matematick´a knihovna . . . . . . . . . . . . . 2.7.1 Obalov´a tˇelesa . . . . . . . . . . . . . . 2.7.2 Pomocn´e konstanty a funkce . . . . . 2.8 Vstupnˇe/vystupn´ ı operace - uchov´av´an´ı dat ´ ˇ 3 Supaplesk . . . . . . . . . . . . . . . . . . . . . . . 3.1 Zad´an´ı . . . . . . . . . . . . . . . . . . . . . . 3.1.1 Popis hry . . . . . . . . . . . . . . . . . ˚ eh vyvoje 3.2 Prubˇ . . . . . . . . . . . . . . . . . . ´ 3.3 Hierarchie hern´ıch objektu˚ . . . . . . . . . . . 4 Z´avˇer . . . . . . . . . . . . . . . . . . . . . . . . . . A Kompletn´ı minim´aln´ı aplikace . . . . . . . . . . . B Obrazov´a pˇr´ıloha . . . . . . . . . . . . . . . . . . . 2.6
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . . . . . .
15 16 16 17 17 18 18 19 19 19 20 21 21 21 22 23 26 30 32
2
Kapitola 1
´ Uvod Na pˇrelomu let 2006/2007 jsou bˇezˇ nˇe dostupn´e frameworky a vyvojov´ a ´ ˇ ı vyprostˇred´ı pro vyvoj enterprise a desktopovych ´ ´ aplikac´ı, kter´a umoˇznuj´ ´ ˚ d´ıky vyˇssˇ´ı urovni ´ voj´arˇ skym abstrakce, soustˇredit se na vyvoj vlast´ tym ´ um, ´ ´ ˇ ym n´ıch aplikac´ı m´ısto vˇenov´an´ı sv´eho cˇ asu pˇr´ıliˇs n´ızkourov nov ´ technickym ´ 1 ˚ detailum. Napˇr´ıklad platforma Java od firmy Sun v kombinaci s dalˇs´ımi ˇ knihovnami umoˇznuje pohodlnˇe ps´at multiplatformn´ı aplikace pˇri vynalo´ ı. zˇ en´em minim´aln´ım usil´ V oblasti tvorby poˇc´ıtaˇcovych ´ her, cˇ asto oznaˇcovanych ´ jako videohry, je situace diametr´alnˇe odliˇsn´a. Neexistuje jednotn´e vyvojov´ e prostˇred´ı, kter´e ´ by umoˇznilo soustˇredit se na vyvoj hry a jej´ıho obsahu bez rˇ eˇsen´ı neust´ale ´ ˚ Vˇetˇsina nejdraˇzsˇ´ıch titulu˚ prod´avanych stejnych ´ technickych ´ detailu. ´ v kamennych ´ obchodech, oznaˇcovanych ´ cˇ asto term´ınem AAA hry, je dnes vystavˇena bud’ pˇr´ımo na zelen´e louce, nebo na technologii vyvinut´e nˇekterou ze specializovanych firem. Tyto technologie nebyvaj´ ´ ´ ı volnˇe dostupn´e sˇ irok´e veˇrejnosti, nebo jsou pevnˇe sv´az´any s typem hry a hr´acˇ ovou platformou. Pˇri tvorbˇe hry na zelen´e louce se v praxi stav´ı bud’ na volnˇe sˇ iˇritelnych ´ knihovn´ach sjednocenych ´ pod Khronos Group[15], nebo na DirectX[8] od ´ ˇ e, dovoluj´ıc´ı vyuˇz´ıt nejfirmy Microsoft. Obˇe platformy jsou n´ızkourov nov´ novˇejˇs´ı technologie na maximum. Na druhou stranu d´ıky jejich sˇ irokym ´ moˇznostem se zvyˇsuje i sloˇzitost pouˇzit´ı. Pro vytvoˇren´ı jednoduch´e sc´eny ´ ı a na kaˇzd´eho tvurce ˚ je potˇreba vyvinout netrivi´aln´ı usil´ je kladena potˇreba detailn´ı technick´e znalosti prostˇred´ı ve kter´em vyv´ıj´ı. Dne 11. 12. 2006 byl vyd´an firmou Microsoft XNA Framework 1.0, ktery´ m´a za c´ıl zpˇr´ıstupnit modern´ı hardware sˇ irok´e veˇrejnosti. Podle Microsoftu budou moci d´ıky XNA vytv´arˇ et vizu´alnˇe pˇritaˇzliv´e multiplatformn´ı hry i studenti, nadˇsenci a technicky m´enˇe zdatn´ı vyvoj´ ´ arˇ i. Z´arovenˇ m´a byt ´ i platformou vhodnou pro profesion´aln´ı vyvojaˇ re, kterym ´ ´ m´a zjednoduˇsit proces tvorby hry a jej´ı vyvoj znaˇcnˇe zlevnit. ´ Moje pr´ace ve sv´e prvn´ı cˇ a´ sti zkoum´a moˇznosti XNA platformy a podro1.
http://java.sun.com/
3
´ VOD 1. U buje ji technick´e analyze. V r´amci pr´ace jsem vytvoˇril jednoduchou video´ ˇ hru na motivy titulu˚ Boulder Dash a Supaplex s n´azvem Supaplesk. V druh´e cˇ a´ sti pr´ace popisuji XNA v praxi pˇri vyvoji t´eto hry. ´
4
Kapitola 2
XNA 2.1
Pˇredstaven´ı XNA
XNA je n´azev nov´e platformy spoleˇcnosti Microsoft, kter´a m´a pˇribl´ızˇ it vyvoj ´ modern´ıch videoher sˇ irˇs´ı veˇrejnosti a ulehˇcit pr´aci profesion´aln´ım hern´ım ˚ ˇ vyvoj´ Jako prvn´ı, zdarma dostupn´a platforma, umoˇznuje soubˇezˇ ny´ ´ arˇ um. vyvoj hry jak pro osobn´ı poˇc´ıtaˇce, tak pro dedikovan´a zaˇr´ızen´ı - hern´ı kon´ zole. Samotn´e slovo XNA znamen´a XNA’s Not Acronymed. XNA oznaˇcuje dvˇe z´akladn´ı komponenty - a to XNA Game Studio Express a XNA Framework. 2.1.1
XNA Game Studio Express
XNA Game Studio Express, nebo zkr´acenˇe XNA GSE, je volnˇe dostupn´e ˚ chod operaˇcn´ı vyvojov´ e prostˇred´ı pro platformu XNA. Vyˇzaduje pro svuj ´ syst´em MS Windows XP a nainstalovan´e Visual Studio C# Express, kter´e ´ je srdcem pro psan´ı programov´eho kodu. K obvyklym ´ vlastnostem Visual ˚ zvuku˚ Studia pˇrid´av´a podporu spr´avy hern´ıho obsahu, tj. textur, modelu, a efektu˚ a moˇznost vyvoje na konzoli Xbox360. ´ 2.1.2
XNA Framework
XNA Framework 1.0 je sada managed .NET [9] [3] knihoven postavenych ´ na platformˇe .NET Framework 2.0 a DirectX9 [8]. Jedn´a se tedy o programov´e rozhran´ı pro pr´aci pˇredevˇs´ım s uˇzivatelskym ´ vstupem, grafikou, zvukem, hern´ım obsahem a dalˇs´ımi souˇca´ stmi. Jednotlivymi ´ komponentami se budu zabyvat detailnˇeji d´ale v textu. XNA Framework se hrdˇe hl´as´ı byt ´ ´ multiplatformn´ı knihovnou. V souˇcasnosti existuj´ı pouze implementace od firmy Microsoft pro syst´emy MS Windows XP a Xbox360. Bˇehem jara 2007 vyjde ˚ i verze pro operaˇcn´ı syst´em MS Windows Vista. Z toho duvodu vyvst´av´a ot´azka: Jedn´a se opravdu o multiplatformn´ı knihovnu, kdyˇz je moˇzn´e pro” vozovat hry vyvinut´e s pomoc´ı XNA pouze na operaˇcn´ıch syst´emech firmy Microsoft?“ Dle m´eho soudu ano. Vytv´arˇ en´e hry jsou kompilov´any do ja5
2. XNA ´ (bytekod) ´ zyku Common Intermediate Language (CIL)[19], coˇz je mezikod spustitelny´ libovolnou implementac´ı Common Language Runtime (CLR)[20]. .NET Framework je pr´avˇe implementac´ı CLR pro syst´emy MS Windows. Existuje vˇsak i jin´a implementace CLR vyv´ıjen´a firmou Novell. Jmenuje se Mono a podle dokumentace je schopn´a bˇehu na velk´em mnoˇzstv´ı platforem. Posledn´ı pˇrek´azˇ kou pro doopravdy multiplatformn´ı hry je absence XNA Frameworku pro jin´e platformy. Tento probl´em se snaˇz´ı rˇ eˇsit projekt jm´enem Mono.XNA, ktery´ je implementac´ı XNA Frameworku pomoc´ı OpenGL[13]. Bohuˇzel v dobˇe psan´ı m´e pr´ace je v pˇr´ıliˇs rann´em st´adiu vyvoje ´ pro posouzen´ı jeho schopnost´ı. 2.1.3
Express verze a vyvoj pro Xbox360 ´
V XNA Game Studio Express je moˇzn´e tvoˇrit komerˇcn´ı hry pro MS Windows, ale pro vyvoj komerˇcn´ı hry pro Xbox360 je potˇreba si obstarat XNA ´ ˚ Game Studio Professional, kter´e by mˇelo vyj´ıt do l´eta 2007. Jedinym ´ zpusobem jak dostat svou hru na Xbox360 je pomoc´ı pˇr´ım´eho propojen´ı s poˇc´ıtaˇcem na kter´em je nainstalov´ano XNA Game Studio Express a kter´e m´a ´ k dispozici kompletn´ı zdrojov´e kody vlastn´ı hry. Z´arovenˇ je tˇreba si zakou˚ pit u spoleˇcnosti Microsoft cˇ lenstv´ı v klubu vyvoj´ pro Xbox360, kter´e ´ arˇ u[12] je dostupn´e ve dvou variant´ach. Bud’ za $49 po dobu 4 mˇes´ıcu˚ nebo za $99 po dobu 1 roku.
2.2
Content Pipeline - spr´ava hern´ıch dat
´ Jedn´ım ze z´akladn´ıch ukol u˚ n´avrhu hry na zelen´e louce“ je vytvoˇren´ı do” stateˇcnˇe robustn´ıho spr´avce hern´ıch dat neboli hern´ıho obsahu. Tato spr´ava ´ zn´eho m´edia, pˇrevod by mˇela automaticky zajiˇst’ovat serializaci dat z uloˇ mezi intern´ımi form´aty do pokud moˇzno jednoho unifikovan´eho form´atu pouˇz´ıvan´eho hrou a centralizovat spr´avu do mal´eho funkˇcn´ıho celku. 2.2.1
Spr´ava hern´ıho obsahu v XNA Game Studio Express
XNA Game Studio Express pˇrich´az´ı s moˇznost´ı vkl´adat hern´ı data do XNA projektu stejnˇe jako jakykoliv jiny´ soubor. Je velmi vhodn´e si vytvoˇrit ro´ zumnou adres´arˇ ovou strukturu do kter´e jsou tato data tˇr´ıdˇena. Napˇr´ıklad dvourozmˇerny´ obr´azek v libovoln´em form´atu podporovan´em XNA Frameworkem je moˇzn´e pˇridat cˇ istˇe pomoc´ı klik´an´ı myˇs´ı v Solution Explorer. Po pˇrid´an´ı obr´azku do projektu je moˇzn´e nastavit jeho vlastnosti. K tomu slouˇz´ı okno Properties stejnˇe jako pro pr´aci s vlastnostmi libovoln´e jin´e kom6
2. XNA
Obr´azek 2.1: XNA Game Studio Express ˚ zit´e vlastnosti se kterymi ponenty v C# projektu. Postupnˇe zm´ın´ım jen duleˇ ´ lze manipulovat. Asset Name nastavuje jm´eno dat pod kterym ´ je obr´azek dostupny´ z programu hry. Build Action urˇcuje co se s souborem bude d´ıt pˇri kompilaci projektu. Volba Compile urˇc´ı zda soubor bude zkompilov´an ´ Naopak volba Content rˇ´ık´a, zˇ e projde pˇredzpracov´an´ım jako zdrojovy´ kod. a bude zaˇrazen do spr´avce obsahu. Samotn´e pˇredzpracov´an´ı prob´ıh´a na ´ dvou urovn´ ıch. Nejdˇr´ıve projde potomkem tˇr´ıdy ContentImporter a posl´eze potomkem tˇr´ıdy ContentProcessor.
2.2.2
Content Importer
´ znych Content Importer se star´a o serializaci dat z uloˇ ´ prostor, tj. naˇc´ıt´a data z m´edia do operaˇcn´ı pamˇeti. V XNA Frameworku jsou k dispozici import´ery, kter´e dok´azˇ ´ı naˇc´ıst modelov´a data z form´atu˚ X[14] a FBX[1], obrazov´a data textur ve form´atech bmp, dds, dib, hdr, jpg, pfm, png, ppm, ˚ vlastn´ı imtga a zvukov´a data ve form´atu XACT[7]. Je moˇzn´e pˇridat i svuj port´er pro libovoln´a data. Nejsou kladeny zˇ a´ dn´e dalˇs´ı omezuj´ıc´ı podm´ınky na podobu vlastn´ıho import´eru, a tak i j´a jsem vyuˇzil t´eto moˇznosti a vytvoˇril vlastn´ı LevelImporter, ktery´ naˇc´ıt´a data o rozm´ıstˇen´ı objektu˚ ve hˇre ˇ Supaplesk. 7
2. XNA 2.2.3
Content Processor
´ Content Processor je souˇca´ stka“, kter´a m´a za ukol zpracovat data naˇcten´a ” pomoc´ı potomka tˇr´ıdy ContentImporter a jeho vysledkem by mˇel byt ´ ´ form´at, ˚ ze byt ktery´ aˇckoli muˇ ´ platformovˇe z´avisly, ´ mus´ı byt ´ zoptimalizovany´ pro okamˇzit´e pouˇzit´ı. Standardnˇe jsou dod´av´any procesory zajiˇst’uj´ıc´ı vytvoˇren´ı textury, textury s mipmapami, zkompilov´an´ı shaderu˚ a dalˇs´ı. Pro vlastn´ı potˇrebu jsem vytvoˇril LevelProcessor, ktery´ z dat naˇctenych ´ pomoc´ı LevelImporter vytvoˇr´ı struktury pouˇzit´e pˇr´ımo ve hˇre. 2.2.4
Spolupr´ace vˇsech souˇca´ st´ı
Celou z´aleˇzitost uk´azˇ i na praktick´em pˇr´ıkladu pˇrid´av´an´ı efektu do XNA ˚ projektu. Skupinˇe shaderu[23], kter´e budou pouˇzity spoleˇcnˇe k jednomu ´ celu, se v XNA n´azvoslov´ı rˇ´ık´a Effect[5] a plat´ı, zˇ e mus´ı byt uˇ ´ vytv´arˇ eny pouze v HLSL[6]. Nejdˇr´ıve je potˇreba efekt vytvoˇrit. K tomu se mi nejv´ıce osvˇedˇcil program FX Composer[2] od firmy NVIDIA, ktery´ obsahuje sadu ˇ ıc´ıch pr´aci na efektu. Pot´e, co je pomocnych e usnadnuj´ ´ n´astroju˚ vyznamnˇ ´ efekt hotov, je tˇreba ho v XNA Game Studio Express pˇridat jako libovolny´ jiny´ soubor do projektu a nastavit import´er i procesor na pr´aci s efektem. Pˇri dalˇs´ım sestaven´ı projektu je postar´ano o jeho pˇrevod do vhodn´e bin´arn´ı formy. Efekt je uloˇzen do souboru v intern´ım form´atu XNA Frameworku a pˇripraven pro pouˇzit´ı pˇr´ımo ve hˇre. 2.2.5
Content Manager
ContentManager je objekt vlastnˇeny´ komponentou Game a je zodpovˇedny´ za spr´avu hern´ıch dat vloˇzenych ´ do projektu. V aplikaci lze pak jiˇz velmi jednoduˇse pomoc´ı zavol´an´ı jeho metody Load() z´ıskat odkaz na pˇripraven´a hern´ı data a d´ale s nimi pracovat.
2.3
Aplikaˇcn´ı model
ˇ ı XNA Framework obsahuje pˇredpˇripraven´e komponenty, kter´e umoˇznuj´ ˚ um ˚ hry abstrahovat od implementaˇcn´ıch detailu˚ z´akladn´ıch vlastnost´ı tvurc ˚ hry. Automaticky rˇ eˇs´ı za tvurce probl´emy se spr´avou vykreslovac´ı smyˇcky, spr´avou hern´ıho obsahu a dalˇs´ı. Komponentou aplikaˇcn´ıho modelu budu nad´ale myslet tˇr´ıdu odvozenou od jedn´e ze tˇr´ıd GameComponent, DrawableGameComponent nebo Game. Tˇr´ıdou pak libovolnou tˇr´ıdu definovatelnou v jazyce C#. 8
2. XNA 2.3.1
Game
Stˇredobodem aplikaˇcn´ıho modelu v XNA projektu je komponenta Game. Tato komponenta je svym ´ typem podobn´a tˇr´ıdˇe DrawableGameComponent, ale obsahuje nav´ıc vˇsechny syst´emov´e objekty a zaˇr´ızen´ı jako napˇr´ıklad okno do kter´eho je hra vykreslov´ana, kolekce vˇsech vlastnˇenych ´ kompo˚ zitˇejˇs´ı je kolekce vˇsech vlastnˇenent, nebo kontext grafick´e karty. Nejduleˇ nych ´ komponent. V praxi existuje jen jedna instance tˇr´ıdy Game, ktery´ vlast´ hry je posl´eze postaven na tom, n´ı vˇsechny ostatn´ı komponenty. Cely´ kod zˇ e po inicializaci objektu typu Game se vytvoˇr´ı vˇsechny hern´ı komponenty, ˇ e syst´emy tj. pro pˇr´ıklad vesm´ırn´eho simul´atoru rakety, planety, zbranov´ a dalˇs´ı, kter´e se vˇsechny pˇridaj´ı do kolekce Components vlastnˇenych ´ komponentou Game. Tato komponenta se pot´e star´a o spr´avn´e vol´an´ı jejich metod na aktualizaci hern´ı logiky a na vykreslen´ı. Cel´a maˇsin´erie“ se startuje ” zavol´an´ım metody Run(), kter´a spust´ı nekoneˇcnou hern´ı smyˇcku. 2.3.2
GameComponent
Esenci´aln´ı vyznam v aplikaˇcn´ım modelu m´a tˇr´ıda GameComponent. Je to ´ z´akladn´ı stavebn´ı k´amen pro vˇsechny dalˇs´ı komponenty a kaˇzd´a komponenta by mˇela byt ´ jej´ım potomkem. Tˇr´ıda GameComponent obsahuje dvˇe virtu´aln´ı metody, kter´e je tˇreba v potomc´ıch implementovat. Prvn´ı z nich je funkce Initialize(), ve kter´e by se mˇelo odehr´at veˇsker´e poˇca´ teˇcn´ı nastaven´ı stavu komponenty. Tato metoda je automaticky vol´ana komponentou typu Game, kter´a j´ı vlastn´ı. Druhou metodou kterou je tˇreba implementovat je metoda Update(), kter´a je vol´ana pokaˇzd´e, kdyˇz je potˇreba aktualizo˚ ze byt vat stav komponenty. Nav´ıc muˇ ´ vyvol´ana vˇzdy po fixn´ıch cˇ asovych ´ ´ ıch nebo ihned po skonˇcen´ı kreslen´ı pˇredchoz´ı sc´eny na obrazovku. usec´ ˚ Metoda Update() je m´ıstem, kam by tvurce mˇel umist’ovat hern´ı logiku kom´ staraj´ıc´ı se ponenty. Pod hern´ı logikou je moˇzn´e si pˇredstavit napˇr´ıklad kod o pohyb rakety ve vesm´ırn´em simul´atoru, testov´an´ı koliz´ı s prostˇred´ım a podobnˇe. Pˇri m´ırnˇe form´alnˇejˇs´ım pohledu na vˇec by v metodˇe Update() mˇel ´ mˇen´ıc´ı stav komponenty v interakci se zbytkem byt ´ um´ıstˇeny´ veˇskery´ kod hry. 2.3.3
DrawableGameComponent
Komponenta DrawableGameComponent je potomkem GameComponent ke kteˇ ı komponentˇe naˇc´ıst a uvolnit r´e pˇrid´av´a virtu´aln´ı metody, kter´e umoˇznuj´ hern´ı obsah z objektu ContentManager a vykreslit se do sc´eny. K vykreslen´ı slouˇz´ı metoda Draw(). Tato metoda je zodpovˇedn´a za spr´avn´e vykres9
2. XNA len´ı objektu. Posledn´ımi popisovanymi metodami jsou metody LoadGra´ phicsContent() a UnloadGraphicsContent(), kter´e jsou zodpovˇedn´e za spr´avn´e naˇcten´ı a uvolnˇen´ı hern´ıho obsahu. Je to pˇresnˇe to m´ısto, kde je tˇreba od instance tˇr´ıdy ContentManager z´ıskat a uvolnit reference na hern´ı data. Pˇri pouˇzit´ı Aplikaˇcn´ıho modelu XNA nen´ı tˇreba zˇ a´ dnou z tˇechto metod volat ruˇcnˇe. O vol´an´ı ve spr´avny´ cˇ as a ve spr´avn´em poˇrad´ı se star´a objekt Game, ktery´ komponentu vlastn´ı.
2.4
Vstup od uˇzivatele
V kaˇzd´e hˇre je tˇreba oˇcek´avat a zpracov´avat od uˇzivatele interakce. V XNA je moˇzn´e pracovat s uˇzivatelovou kl´avesnic´ı a hern´ım ovladaˇcem. Speci´alnˇe na Windows je moˇzn´e pracovat i s myˇs´ı. Vˇsechny XNA hry by mˇeli byt ´ prim´arnˇe navrˇzeny tak, aby je bylo moˇzn´e ovl´adat pomoc´ı Xbox360 Controller[11]. Tento ovladaˇc je jedinym ´ se kterym ´ XNA komunikuje. Jin´e hern´ı ovladaˇce nelze s XNA pouˇz´ıt a to ani na Windows. API pro cˇ ten´ı vstupu se nach´az´ı v jmenn´em prostoru Microsoft.Xna.Framework.Input. 2.4.1
Analogovy´ a digit´aln´ı vstup
Vstupn´ı zaˇr´ızen´ı maj´ı prvky rˇ ad´ıc´ı se do dvou kategori´ı podle typu vstupu, kter´e generuj´ı. Prvn´ı skupinou jsou digit´aln´ı tlaˇc´ıtka“, u kterych ´ je moˇzn´e ” zjistit pouze jestli jsou stisknuta nebo puˇstˇena. Druhou skupinou jsou analogov´e ovl´adac´ı prvky, ze kterych ´ je moˇzn´e zjistit velikost vychylen´ ´ ı prvku v ose. Pˇri vytv´arˇ en´ı hry je tˇreba si rozmyslet, jak´a jejich kombinace je pro dany´ projekt vhodn´a. 2.4.2
Hern´ı ovladaˇc
˚ P´akov´e prvky Xbox360 Controller obsahuje oba druhy vstupn´ıch prvku. tzv. sticks leˇz´ıc´ı na vrchn´ı stranˇe, ze kterych ´ lze cˇ ´ıst re´aln´a cˇ ´ısla v rozmez´ı [−1, 1] pro obˇe souˇradn´e osy x a y. Na pˇredn´ı stranˇe ovladaˇce jsou pak um´ıstˇena tlaˇc´ıtka podobn´a spouˇst´ım zbranˇe oznaˇcovan´a jako triggers. Ze spouˇst´ı je moˇzn´e zjistit m´ıru jejich stisku jako re´aln´e cˇ ´ıslo v mez´ıch [0, 1]. 2.4.3
Kl´avesnice
Kl´avesnice obsahuje jen digit´aln´ı tlaˇc´ıtka“ a nen´ı typickou souˇca´ st´ı hern´ı ” konzole. Nen´ı prim´arnˇe urˇcena ke hran´ı, ale je moˇzn´e j´ı v krajn´ım pˇr´ıpadˇe vyuˇz´ıt. 10
2. XNA
Obr´azek 2.2: Xbox360 Controller 2.4.4
Myˇs
K hern´ı konzoli Xbox360 nen´ı moˇzn´e pˇripojit myˇs. Naproti tomu XNA Fraˇ mework obsahuje API, kter´e toto ovl´adac´ı zaˇr´ızen´ı zpˇr´ıstupnuje a je moˇzn´e ho vyuˇz´ıt ve hr´ach urˇcenych ´ pro Windows.
2.4.5
Pr´ace se vstupem
V pˇredchoz´ım textu jsem popsal s jakymi zaˇr´ızen´ımi je moˇzn´e pracovat, co ´ jsem ale nezm´ınil je, jak se s nimi pracuje. Vstup se cˇ te formou dotazov´an´ı ˚ Stav prvku je urˇcen podle jeho druhu. na aktu´aln´ı stav jednotlivych ´ prvku. Jedn´a-li se o digit´aln´ı tlaˇc´ıtko“, lze pˇreˇc´ıst pravdivostn´ı hodnotu, kter´a rˇ´ık´a ” jestli je tlaˇc´ıtko stisknut´e. Z analogovych prvku˚ se z´ısk´avaj´ı re´aln´a cˇ ´ısla, ´ kter´a urˇcuj´ı m´ıru jejich stisku nebo naklonˇen´ı. Pro kaˇzdy´ druh vstupn´ıho zaˇr´ızen´ı {hern´ı ovladaˇc, kl´avesnice, myˇs} existuje statick´a tˇr´ıda {GamePad, Keyboard, Mouse} obsahuj´ıc´ı statickou metodu GetState(), kter´a vr´at´ı stav vˇsech prvku˚ zaˇr´ızen´ı. Speci´alnˇe pro Xbox360 Controller je tˇreba jeˇstˇe urˇcit, ze kter´eho z aˇz cˇ tyˇr moˇznych, v jednom okamˇziku˚ pˇripojenych, ovladaˇcu˚ ´ ´ se bude cˇ ´ıst. 11
2. XNA
2.5
Pr´ace s grafikou
˚ zitˇejˇs´ıch lidskych Jedn´ım z nejduleˇ ´ smyslu˚ je zrak. Pro poˇc´ıtaˇcov´e hry plat´ı, stejnˇe jako pro jin´e zboˇz´ı, zˇ e pokud nejsou dostateˇcnˇe vizu´alnˇe atraktivn´ı ´ esˇ nymi. maj´ı menˇs´ı sˇ anci st´at se uspˇ XNA Framework nab´ız´ı sadu API, ´ ve jmenn´em prostoru Microsoft.Xna.Framework.Graphics pro pr´aci s grafi˚ zitym kou, kter´a by mˇela byt ´ funkˇcn´ım ekvivalentem Direct3D 9. Duleˇ ´ faktorem pˇri vyvoji hry nad XNA a pˇredevˇs´ım i pro konzole je fakt, zˇ e hr´acˇ i ´ ˚ televiz´ı, kter´e nemus´ı zobrazopˇripojuj´ı cˇ asto sv´e konzole k starˇs´ım typum vat korektnˇe kraje obrazovky. Dokumentace k XNA doporuˇcuje vepisovat ˚ zit´e informace do vnitˇrn´ıch 80% plochy vykreslovac´ıho bufferu. text a duleˇ 2.5.1
2D grafika
´ je Jednoduˇssˇ´ı na vyvoj, a pro nˇekter´e typy her i vhodnˇejˇs´ı, zobrazovac´ı mod ´ kreslen´ı v rovinˇe. V podstatˇe jde jen o vykreslov´an´ı obr´azku˚ (textur) v ploˇse. XNA Framework obsahuje rozhran´ı, kter´e zjednoduˇsuje vyvoj tˇechto 2D ´ ˚ Sprite[24] je obecnˇe otexturovan´a ploˇska her. Pouˇz´ıv´a se koncept spritu. ´ ˚ zitˇejˇs´ı dvˇe natoˇcen´a vˇzdy kolmo ke kameˇre. V tomto modu jsou nejduleˇ tˇr´ıdy Texture2D a SpriteBatch. Texture2D reprezentuje dvourozmˇerny´ obraz (texturu), kter´a se bude nan´asˇ et na obd´eln´ıkovou ploˇsku definovanou spri´ naˇcte texturu ze spr´avce hern´ıch dat. tem. N´asleduj´ıc´ı kod ContentManager c o n t e n t ; // ... Texture2D s p r i t e T e x t u r e ; s p r i t e T e x t u r e = c o n t e n t . Load
( ” Obrazek ” ) ;
Tˇr´ıda SpriteBatch definuje objekt ktery´ bude vykreslen. Obsahuje tˇri nej˚ ziˇejˇs´ı metody Begin(), Draw() a End(). Begin() pˇrepne kontext grafick´e duleˇ karty a nastav´ı vˇse potˇrebn´e pro vykreslen´ı textury na obrazovku, metoda Draw() provede samotn´e vykreslen´ı a metoda End() uvoln´ı obsazen´e prost´ potˇrebny´ pro vykreslen´ı spritu se stˇredem na pozici [100,100] rˇ edky. Cely´ kod vypad´a takto. s p r i t e B a t c h . Begin ( ) ; Vector2 pos = new Vector2 ( 1 0 0 , 100 ) ; s p r i t e B a t c h . Draw ( s p r i t e T e x t u r e , pos , Color . White ) ; s p r i t e B a t c h . End ( ) ;
Veˇsker´e transformace objektu˚ se v tomto reˇzimu zad´avaj´ı jako parameˇ try metody Draw(). Tato metoda existuje v nˇekolika pˇret´ızˇ en´ıch. Umoˇznuje napˇr´ıklad pouˇz´ıt jen cˇ a´ st zdrojov´e textury na potaˇzen´ı“ spritu, orotovat ” ´ sprite o zadany´ uhel kolem jeho stˇredu cˇ i zmˇenu mˇerˇ´ıtka v prostoru objektu. Vˇsechny vyˇ ´ se popsan´e metody jsou plnˇe akcelerovan´e grafickym ´ pro12
2. XNA cesorem, proto je moˇzn´e pouˇz´ıt tˇr´ıdu SpriteBatch i v 3D hˇre ke zobrazen´ı ˚ billboardingu nebo cˇ a´ sticovych ´ syst´emu. 2.5.2
3D grafika
Na zaˇca´ tku kaˇzd´e hry se vytv´arˇ´ı instance tˇr´ıdy Game. V jej´ı inicializaci se automaticky vytvoˇr´ı objekt reprezentuj´ıc´ı grafick´e zaˇr´ızen´ı, ktery´ zprostˇredkov´av´a komunikaci s grafickym ´ cˇ ipem. Lze z nˇej cˇ ´ıst a mˇenit nastaven´ı grafick´eho reˇzimu, kreslit do nˇej a mˇenit kontext. V minul´e sekci o 2D grafice popsan´e rozhran´ı kresl´ı sv´e objekty tak´e pˇres toto grafick´e zaˇr´ızen´ı aniˇz by bylo tˇreba jej explicitnˇe volat. 2.5.2.1 Transformace Jednou z esenci´aln´ıch potˇreb pˇri kreslen´ı je m´ıt jednoduchy´ n´astroj na transformace jednotlivych ´ objektu˚ ve sc´enˇe. V 3D grafice se cˇ asto transformace reprezentuj´ı pomoc´ı transformaˇcn´ıch matic. Tyto matice maj´ı cˇ tvercovy´ tvar ˚ ze reprezentovat libovoln´e line´arn´ı a velikost 4x4. Kaˇzd´a takov´a matice muˇ zobrazen´ı jako napˇr´ıklad rotaci podle osy, translaci nebo zmˇenu mˇerˇ´ıtka. Sloˇzen´ı line´arn´ıch zobrazen´ı je prov´adˇeno jako algebraick´e n´asoben´ı jejich matic a to vyraznˇ e zjednoduˇsuje pr´aci s transformacemi. V´ıce informac´ı je ´ ˚ zit´a informace je, moˇzn´e nal´ezt v libovoln´e uˇcebnici line´arn´ı algebry. Duleˇ zˇ e v XNA Frameworku se implicitnˇe pouˇz´ıv´a right-handed souˇradnicovy´ syst´em. 2.5.2.2 Z´akladn´ı potˇreby pro pr´aci v 3D Pro pr´aci v trojrozmˇern´em prostˇred´ı je tˇreba pochopit tˇri z´akladn´ı principy, kter´e se objevuj´ı pˇri kreslen´ı kaˇzd´eho objektu ve sc´enˇe. 2.5.2.3 World, view a projection matice Grafik pˇri vytv´arˇ en´ı modelu˚ v grafick´em studiu pracuje v lok´aln´ım souˇradnicov´em prostoru vytv´arˇ en´eho objektu. Velmi cˇ asto se oznaˇcuje jako object space. Pot´e kdyˇz je skl´ad´ana ve sc´enˇe mnoˇzina objektu˚ tak jsou vˇsechny zasazov´any v jednom prostoru, tj. v jednom svˇetˇe. Tento prostor se nazyv´ ´ a world space. Proto, aby uˇzivatel nemusel mˇenit pˇri kaˇzd´e poˇzadovan´e trans˚ se zav´ad´ı ke kaˇzd´emu moformaci modelu souˇradnice vˇsech jeho vrcholu, delu ve sc´enˇe world matice. Ta popisuje transformace object space urˇcit´eho modelu od world space. V tuto chv´ıli jsme schopni vz´ıt modely a poskl´adat je do sc´eny. Jednoduchou dalˇs´ı manipulac´ı s jejich world maticemi je moˇzn´e je 13
2. XNA d´ale posouvat, rotovat cˇ i mˇenit jejich mˇerˇ´ıtko. Matice view urˇcuje um´ıstˇen´ı kamery ve sc´enˇe ve world space. Posledn´ı matice projection, zobraz´ı prostor ˚ monitor do projection space. sn´ımany´ kamerou na dvourozmˇerny´ uˇzivateluv Ten je d´ale oˇrez´an na prostor na monitoru, tj. jeho obd´eln´ıkovou plochu, kter´a je vidˇet a nazyv´ ´ a se screen space. Pojmy screen space a projection space ˇ ı, protoˇze je mezi nimi minim´aln´ı rozd´ıl. Pokud to nebude se cˇ asto zamˇenuj´ bezpodm´ıneˇcnˇe nutn´e nebudu ve sv´e pr´aci uvaˇzovat projection space. 2.5.2.4 Vertex Buffer Vˇsechny objekty, kter´e dok´azˇ e XNA Framework vykreslit mus´ı byt ´ sloˇzeny ´ z ploˇsek. Nejˇcastˇejˇs´ı ploˇska se kterou je moˇzn´e pracovat, je trojuheln´ ık a i j´a ˚ ´ pokud nezdurazn´ım jinak budu uvaˇzovat ploˇsky trojuheln´ıkov´eho tvaru. ´ Kaˇzdy´ uvaˇzovany´ trojuheln´ ık je tvoˇren tˇremi vrcholy. Vrchol v sobˇe obsaˇ huje informaci o pozici v prostoru ve kter´em se nach´az´ı. Casto s sebou nese, ˇ ıc´ı informace v podobˇe barvy, i kdyˇz to nen´ı nutnou podm´ınkou, i doplnuj´ texturovac´ıch koordin´atu˚ a norm´aly. Vertex Buffer je pak souvisl´a datov´a ´ ˚ Jedinym ˚ oblast, ve kter´e jsou uloˇzeny vrcholy trojuheln´ ıku. jak ´ zpusobem pˇredat v XNA projektu data na vykreslen´ı je pr´avˇe pomoc´ı Vertex Bufferu. ˚ ze zd´at jako omezen´ı, ale m´a rozumn´e opodstatnˇen´ı. Pˇri pos´ıl´an´ı Toto se muˇ informace o vrcholu je potˇreba urˇcit´a souˇcinnost procesoru, syst´emov´e pamˇeti a grafick´e karty. Vˇsechny tyto tˇri komponenty se mus´ı synchronizovat. Zas´ıl´an´ım kaˇzd´eho vrcholu zvl´asˇ t’ nebo po malych ´ skupin´ach zbyteˇcnˇe roste reˇzie cel´eho zpracov´an´ı. Dalˇs´ım motivem proˇc zas´ılat data ve vˇetˇs´ıch skupin´ach, cˇ asto oznaˇcovanych jako chunks, je zˇ e modern´ı grafick´e karty ´ obsahuj´ı speci´aln´ı jednotky, kter´e mohou zpracov´avat grafick´a data paralelnˇe a k tomu aby pracovaly optim´alnˇe potˇrebuj´ı rozumny´ pˇr´ısun dat. 2.5.2.5 Effects XNA Framework neobsahuje grafickou fixed function pipeline[10]. Ta je plnˇe nahrazena programovatelnym ´ hardwarem, tedy shadery. Je moˇzn´e ˚ Prvn´ım je vertex shader, ktery´ umoˇznuje ˇ ps´at dva druhy shader programu. aplikovat libovoln´e transformace na kaˇzdy´ vrchol vstupuj´ıc´ı na grafick´e zaˇr´ızen´ı. Druhym ´ je pixel shader, v OpenGL oznaˇcovany´ jako fragment ˇ shader, ktery´ umoˇznuje prov´adˇet operace na kaˇzd´em fragmentu. Jedn´a se tedy o rasterizaˇcn´ı program. Effect je soubor obsahuj´ıc´ı z´arovenˇ nepr´azdnou ˚ Soubor obsahuje dalˇs´ı metadata, kter´a pomnoˇzinu vertex i pixel shaderu. ˚ tomu, zˇ e hra muˇ ˚ ze bˇezˇ et na lipisuj´ı techniques. Techniky jsou zde kvuli bovoln´em hardware. Pro novˇejˇs´ı hardware je moˇzn´e napsat jinou techniku 14
2. XNA stejn´eho efektu, kter´a pouˇzije posledn´ı dostupn´e funkce a jinou techniku, kter´a bude fungovat i na starˇs´ım cˇ i levnˇejˇs´ım hardware. Kaˇzd´a technika ˚ ze obsahovat v´ıce pruchod ˚ ˚ muˇ u˚ a v kaˇzd´em pruchodu je moˇzn´e volat jiny´ ˚ vertex a pixel shader. O tom, kter´a technika a pruchod se pouˇzij´ı rozhoduje hra aˇz pˇri sv´em bˇehu. XNA Framework definuje tˇr´ıdu BasicEffect, kter´a ˇ umoˇznuje nastavit vˇse co bylo obvykl´e u fixed function pipeline. Je to vestavˇeny´ efekt, ktery´ dovol´ı nastavit svˇetla, z´akladn´ı transformace a dalˇs´ı bez nutnosti ps´at ihned vlastn´ı efekt. 2.5.2.6 Praxe Nic jin´eho neˇz vyˇ ´ se popsan´e vˇeci a postupy nen´ı tˇreba zn´at pro naps´an´ı prvn´ıho vlastn´ıho 3D programu na platformˇe XNA. Na druhou stranu je to minimum a existuj´ı i dalˇs´ı vˇeci, kter´e je dobr´e vyuˇz´ıvat. 2.5.2.7 Index Buffer Ploˇsky modelu cˇ asto sd´ılej´ı nˇekter´e vrcholy. Proto, aby nebylo nutn´e m´ıt uloˇzen´e stejn´e vrcholy v´ıcekr´at ve vertex bufferu, se pouˇz´ıv´a tzv. Index Buffer. Pˇredstav´ıme-li si Vertex Buffer jako pole pevn´e d´elky indexovan´e od 0, pak Index Buffer je uspoˇra´ dan´a mnoˇzina obsahuj´ıc´ı indexy do tohoto pole. Pˇri pos´ıl´an´ı dat na grafickou kartu se pak cˇ te od zaˇca´ tku index bufferu a pos´ıl´a se vˇzdy vrchol na ktery´ ukazuje“ aktu´aln´ı hodnota v index bu” fferu. Tato pˇredstava je zjednoduˇsen´a proto, aby byla dostateˇcnˇe intuitivn´ı. V praxi se oba buffery uzamknou a pˇredaj´ı se pro vyluˇ ´ cny´ pˇr´ıstup grafick´e kartˇe. 2.5.2.8 Modely V XNA Frameworku jsou 3D modely reprezentov´any tˇr´ıdou Model. Ta obsahuje kolekci meshu˚ a kost´ı. Mesh, reprezentov´an pomoc´ı tˇr´ıdy ModelMesh, ´ je mnoˇzina trojuheln´ ıku˚ navz´ajem sd´ılej´ıc´ı nˇekter´e vrcholy. Kost, reprezen˚ ci druh´emu. tovan´a tˇr´ıdou ModelBone, definuje orientaci jednoho konce vuˇ Naˇcten´ı modelu z instance tˇr´ıdy ContentManager je skoro stejn´e jako naˇcten´ı textury. Model model ; ContentManager c o n t e n t ; // ... model = c o n t e n t . Load<Model>(” Content \\ jmeno modelu ” ) ;
15
2. XNA
2.6
Pr´ace se zvukem
XNA Framework obsahuje API pro pr´aci se zvuky vyhradnˇ e ve form´atu ´ XACT[7]. Microsoft CrossPlatform Audio Creation Tool neboli zkr´acenˇe XACT je program urˇceny´ pro zvukov´e designery. XNA Framework d´ale obsahuje API v jmenn´em prostoru Microsoft.Xna.Framework.Audio pro pˇrehr´av´an´ı audia v XACT form´atu. ˚ zitou souˇca´ st´ı her, s kterou je vˇsak cˇ asto potˇreba praZvuk je velmi duleˇ ˚ covat jinym neˇz s ostatn´ımi hern´ımy daty. Napˇr´ıklad zvuk mo´ zpusobem toru pˇri seˇsl´apnut´ı plynu v z´avodn´ı hˇre by mˇel zn´ıt hlasitˇeji neˇz napˇr´ıklad v klidov´em stavu auta proto, aby celkovy´ dojem z hry byl uvˇerˇ itelny. ´ Z´arovenˇ je tˇreba pˇresnˇe urˇcit co je prac´ı hudebn´ıka - designera, umˇelce a co ´ ˚ tomu, aby umoˇznil je ulohou program´atora. XACT vznikl pˇredevˇs´ım kvuli pˇrirozen´e zaˇclenˇen´ı hudebn´ıka do vyvojov´ eho procesu hry. XACT je souˇca´ s´ t´ı instalace XNA Game Studio Express a je aktu´alnˇe jedinym ´ volnˇe doˇ stupnym tvoˇrit zvukov´a data pro Xbox360. ´ n´astrojem, ktery´ umoˇznuje
Obr´azek 2.3: Microsoft CrossPlatform Audio Creation Tool
2.6.1
Koncept pr´ace
Cel´e audio API je rozdˇeleno na tˇri komponenty. Prvn´ı je glob´aln´ı nastaven´ı (global settings), ke kter´emu se vr´at´ım pozdˇeji. Dalˇs´ı jsou knihovny zvuku˚ wave bank a sound bank. 16
2. XNA 2.6.2
Wave Bank
V XACT lze vytv´arˇ et soubory obsahuj´ıc´ı zvuky a hudbu. Wave Bank je soubor - kolekce fyzickych ´ zvuku˚ (waves) logicky seskupenych ´ dohromady hudebn´ım designerem a ukl´adanych ´ do souboru s pˇr´ıponou .xwb. Pˇrirozenym ´ ˚ ze byt dˇelen´ım zvuku˚ do bank, muˇ ´ napˇr´ıklad na hern´ı a v menu, pˇr´ıpadnˇe ´ dalˇs´ı dˇelen´ı podle urovn´ ı hry. XACT podporuje pouze tˇri vstupn´ı zvukov´e form´aty. Jsou to: •
Windows audio waves (WAV)[27]
•
Nativn´ı form´at Xbox360 (XMA)[29]
•
Audio interchange file format (AIFF)[17]
XMA je zaj´ımavym ´ form´atem. Jde o komprimovany´ form´at postaveny´ na Windows Media Audio (WMA). Xbox360 obsahuje specializovany´ cˇ ip, ktery´ se star´a o jeho dekomprimaci a tud´ızˇ nijak nezatˇezˇ uje hlavn´ı proce˚ ze byt ˚ A to bud’ in-memory a nebo streaming. sor. Wave bank muˇ ´ dvou typu. In-memory banka se cel´a uloˇz´ı pˇri inicializaci do syst´emov´e pamˇeti odkud jsou pot´e zvuky pˇrehr´av´any. Toto je vhodny´ model pro skupinu kr´atkych ´ ˚ kter´e nezab´ıraj´ı mnoho pamˇeti. V pˇr´ıpadˇe, zˇ e je tˇreba pˇrehr´avat zvuku, dlouh´e zvuky, napˇr. hudbu, dlouh´e dialogy a jin´e, je vhodnˇejˇs´ı je um´ıstit do banky typu streaming. Pro kaˇzdy´ zvuk z banky typu streaming plat´ı, zˇ e ˚ do kterych se nenaˇctou cel´e do pamˇeti, ale vytvoˇr´ı se sada bufferu, ´ je cyklicky ukl´ad´ana cˇ a´ st zvuku pˇripraven´a k pˇrehr´an´ı. 2.6.3
Sound Bank
Sound Bank je kolekce zvuku˚ Sounds a Cues, kter´a neobsahuje fyzick´a data, ale pouze odkazy do Wave Bank. Sound urˇcuje, jak se jeden nebo v´ıce fyzickych ´ zvuku˚ (Waves) m´a pˇrehr´at. Sound se skl´ad´a z Tracks a Events. Track je, jak n´azev napov´ıd´a, zvukov´a stopa. Kaˇzd´a zvukov´a stopa je mnoˇzinou ˚ ze obsahovat pr´avˇe jednu ud´alost Play Wave, ud´alost´ı (Events). Track muˇ kter´a pˇrehraje pr´avˇe jeden fyzicky´ zvuk z wave banky a neomezenˇe jinych ´ ud´alost´ı. Tady je vidˇet, zˇ e jedin´e m´ısto, kde jsou propojen´e Sound Bank a Wave Bank je v jednotlivych ´ stop´ach. Event neboli ud´alost popisuje vˇsechny situace, kter´e se mohou st´at se stopou. Tj. pˇrehr´an´ı, zastaven´ı, zmˇenu intenzity, hlasitosti a spuˇstˇen´ı akce (Marker). Pomoc´ı markeru je moˇzn´e pˇredat ˚ ze na toto reakci o pˇrehr´an´ı urˇcit´e pas´azˇ e zvuku zpˇet programu, ktery´ muˇ zareagovat. Syst´emy markeru˚ definuj´ı tzv. interaktivn´ı audio. 17
2. XNA ˚ tj. Track je tedy mnoˇzinou ud´alost´ı Event a Sound je mnoˇzina tracku“ ” ˚ zit´e pro odkazu˚ na zvuky, kterym ´ je moˇzn´e nastavit nˇejak´e parametry duleˇ ˚ ze obsahovat v´ıce tracku“, ˚ kter´e se pˇri pˇrehr´an´ı pˇrehr´an´ı. Kaˇzdy´ Sound muˇ ” spust´ı paralelnˇe. ˚ av´a Cue. Cue je jm´eno zvuku, Posledn´ım nevysvˇetlenym ´ pojmem zust´ kter´e m´a zviditelnˇen´e program´ator. Cel´a jeho pr´ace spoˇc´ıv´a v naˇcten´ı vˇsech bank do projektu a do m´ıst v programu, kde by mˇel zazn´ıt zvuk, um´ıstit ˚ ze obsahovat i v´ıce spouˇst’ na jm´eno poˇzadovan´eho Cue. Samotn´e Cue muˇ neˇz jeden Sound. Tyto zvuky jsou uloˇzeny v seznamu v jehoˇz vlastnostech se d´a nastavit, ktery´ zvuk se m´a pˇri poˇzadavku na pˇrehr´an´ı spustit. Na vybˇ ´ er je vybr´an´ı zvuku n´ahodnˇe, cyklicky popoˇradˇe a jejich dalˇs´ı modifikace. 2.6.4
Global settings
Nastavuje pro vˇsechny Cue v projektu konstanty jako je rychlost pˇrehr´av´an´ı a dalˇs´ı bˇezˇ n´e vlastnosti. Jednou ze dvou velmi zaj´ımavych vlastnost´ı je ´ moˇznost tˇr´ıdit Cue do kategori´ı. V glob´aln´ım nastaven´ı je moˇzn´e vydefinovat nˇekolik jmen kategori´ı zvuku˚ a pracovat s nimi jako s celou skupinou, coˇz zjednoduˇsuje pr´aci s v´ıce zvuky najednou. Implicitnˇe existuj´ı dvˇe ˇ kategorie, Default a Music. Xbox360 umoˇznuje uˇzivateli pouˇstˇet si m´ısto hudby na pozad´ı, kter´a je implicitnˇe souˇca´ st´ı hry, vlastn´ı muziku. Proto potˇrebuje nˇejak rozpoznat, kter´e zvuky ve hˇre jsou hudba na pozad´ı tak, aby je mohl nahradit uˇzivatelovou hudbou. Pr´avˇe k tomu slouˇz´ı kategorie Music. Vˇsechny zvuky kter´e se maj´ı pˇri spuˇstˇeni uˇzivatelova soundtracku vypnout, mus´ı m´ıt nastavenu kategorii na Music. Dalˇs´ı zaj´ımavou vlastnost´ı je moˇznost definovat si promˇenn´e zpˇr´ıstupnˇen´e program´atorovi. ˇ ıc´ı pˇrehr´av´an´ı zvuku motoru v autˇe. ProNapˇr´ıklad promˇennou ovlivnuj´ ˚ ze v programu manipulovat a t´ım zpˇetnˇe ovlivnovat ˇ gram´ator s n´ı pot´e muˇ vysledn y´ zvuk. ´ 2.6.5
Jak zvuk pˇrehr´at?
˚ ze vypadat na prvn´ı pohled velmi Pr´ace se zvuky ve form´atu XACT muˇ sloˇzit´a, ale opak je pravdou. Ve skuteˇcnosti je jen tˇreba naˇc´ıst data vytvoˇren´a v programu XACT AudioEngine audioEngine ; WaveBank waveBank ; SoundBank soundBank ; Cue sound ; // ... audioEngine = new AudioEngine ( ” Content \\Audio\\ MujProjekt . xgs ” ) ;
18
2. XNA waveBank = new WaveBank ( audioEngine , ” Content \\Audio\\Wave Bank . xwb” ) ; soundBank = new SoundBank ( audioEngine , ” Content \\Audio\\Sound Bank . xsb ” ) ; sound = soundBank . GetCue ( ” jmeno cue ” ) ;
a um´ıstit spouˇst’ zvuku na vhodn´e m´ısto v programu. sound . Play ( ) ;
2.7
Matematick´a knihovna
XNA Framework obsahuje nˇekolik tˇr´ıd pro zjednoduˇsen´ı pr´ace s vektory, maticemi a kvaterniony. Vektory mohou byt ´ dvou, tˇr´ı nebo cˇ tyˇr sloˇzkov´e. Jsou ve tˇr´ıd´ach Vector{poˇcet sloˇzek} tj. Vector2, Vector3 a Vector4 a maj´ı pˇredefinovan´e oper´atory tak, aby se chovali dle oˇcek´av´an´ı. Matice definovan´a ve tˇr´ıdˇe Matrix je cˇ tvercov´a matice typu 4x4 uloˇzen´a v rˇ a´ dkov´e formˇe (row-major matrix)[26]. Definuje nˇekolik pomocnych ´ metod na vytv´arˇ en´ı ˚ ych rotaˇcn´ıch matic podle ruzn ´ os, zmˇen mˇerˇ´ıtka a translac´ı. Vˇsechny tˇr´ıdy ˇ typu Vector{n} definuj´ı d´ale metodu Transform(), kter´a umoˇznuje aplikovat transformaci v podobˇe matice typu Matrix na n-sloˇzkovy´ vektor. 2.7.1
Obalov´a tˇelesa
˚ optiObalov´a tˇelesa[18] se v poˇc´ıtaˇcov´e grafice pouˇz´ıvaj´ı velmi cˇ asto kvuli malizac´ım. Nejjednoduˇssˇ´ı ob´alkou je koule. Obalen´ım 3D modelu˚ ve sc´enˇe ˚ ci jin´emu tˇelesu bez z´ısk´av´ame moˇznost jak zhruba zjistit polohu objektu vuˇ nutnosti testov´an´ı vˇsech bodu˚ patˇr´ıc´ıch objektu. V XNA frameworku jsou pˇripraveny k pouˇzit´ı tˇri obalov´a tˇelesa. Jedn´a se o box (BoundingBox), kouli (BoundingSphere) a komoly´ jehlan (BoundingFrustum). Pro kaˇzd´e obalov´e tˇeleso existuj´ı statick´e metody, kter´e dok´azˇ ´ı spoˇc´ıtat nejmenˇs´ı ob´alku pro zadanou mnoˇzinu bodu˚ pomoc´ı metody CreateFromPoints() cˇ i z jin´eho obalov´eho tˇelesa pomoc´ı metod CreateFrom{Volume}(). Kaˇzd´e tˇeleso obsahuje ˚ mnohon´asobnˇe pˇret´ızˇ enou metodu Intersect(), kter´a testuje tˇeleso na prunik s jinym ´ obalovym ´ tˇelesem, rovinou cˇ i pˇr´ımkou. Rovina je reprezentov´ana obecnou rovnic´ı pomoc´ı tˇr´ıdy Plane a pˇr´ımka se schov´av´a pod n´azvem paprsek (Ray). Je vhodn´e zm´ınit, zˇ e kaˇzdy´ 3D Model v XNA je reprezentov´an ˚ Kaˇzdy´ mesh m´a automaticky pˇri naˇcten´ı vypoˇc´ıtanou kumnoˇzinou meshu. lovou ob´alku (BoundingSphere), kterou m´a uloˇzenou pro dalˇs´ı moˇzn´e pouˇzit´ı. 2.7.2
Pomocn´e konstanty a funkce
Vˇsechny pomocn´e konstanty nebo funkce, kter´e se nehodily nebo neveˇsly do jinych ´ rozhran´ı jsou dostupn´e ve statick´e tˇr´ıdˇe MathHelper. Jsou zde de19
2. XNA ˚ e logaritmy, funkce na finov´any napˇr´ıklad π a jeho n´asobky, e a jeho ruzn´ vypoˇ ´ cet barycentrickych ´ souˇradnic, hermitovsk´a a Catmull-Rom interpolace a dalˇs´ı podobn´e.
2.8
Vstupnˇe/vystupn´ ı operace - uchov´av´an´ı dat ´
´ ziˇsti slouˇz´ı API z jmenn´eho prostoru Pro pr´aci se soubory na datov´em uloˇ Microsoft.Xna.Framework.Storage. Dovoluje cˇ ´ıst a ukl´adat soubory jak do ´ ziˇstˇe (jeho domovsk´eho adres´arˇ e), tak i do m´ısta s hrou. Pro hr´acˇ ova uloˇ ˚ slouˇz´ı tˇr´ıda StorageContainer kde ve vlastnosti Titlepˇr´ıstup k hern´ım datum ˚ Pro pˇr´ıstup do uˇzivateLocation je uloˇzena cesta ke vˇsem hern´ım souborum. ´ ziˇstˇe slouˇz´ı tˇr´ıda StorageDevice, kde neblokuj´ıc´ı metoda BeginShowSlova uloˇ ˚ torageDeviceGuide() zpusob´ ı zobrazen´ı dialogu uˇzivateli, ktery´ vybere se ´ ziˇstˇe je velmi kterou sloˇzkou cˇ i souborem se bude pracovat. Uˇzivatelovo uloˇ vhodn´e m´ısto pˇredevˇs´ım pro ukl´ad´an´ı stavu hry, kdy kaˇzdy´ uˇzivatel m´a vlastn´ı savegame“. ”
20
Kapitola 3
ˇ Supaplesk 3.1
Zad´an´ı
Souˇca´ st´ı zad´an´ı m´e bakal´arˇ sk´e pr´ace bylo vytvoˇren´ı jednoduch´e hry na platformˇe XNA. Samotn´e zad´an´ı mi nechalo dostatek prostoru pro najit´ı vhodn´eho hern´ıho konceptu k realizaci. Nakonec jsem se rozhodl vytvoˇrit remake logickych her Boulder Dash a Supaplex. Vznikaj´ıc´ı hra dostala pro´ ˇ zat´ımn´ı n´azev Supaplesk[16] a v n´asleduj´ıc´ım textu se budu d´ale vˇenovat procesu jej´ıho vyvoje a j´ı samotn´e. ´ 3.1.1
Popis hry
ˇ Supaplesk se hraje v rovinˇe. Pro reprezentaci hern´ı plochy, neboli hern´ı mapy, ˚ V hˇre se objevuj´ı tyto hern´ı jsem pouˇzil dvourozmˇern´e pole hern´ıch objektu. objekty: •
Avatar
•
Protivn´ık
•
Zed’
•
K´amen
•
Diamant
•
ˇ e Zel´
•
C´ıl
˚ ze se pohybovat jen po Avatar je hr´acˇ ova postava, kterou ovl´ad´a. Muˇ sv´em 4-okol´ı, jeho c´ılem je sesb´ırat vˇsechny diamanty na mapˇe a dojet do c´ıle. V t´e chv´ıli hra konˇc´ı a hr´acˇ se pˇresouv´a do dalˇs´ıho kola na jin´e mapˇe. ˚ Bˇehem hry se hr´acˇ mus´ı vyhybat protivn´ıkum, kteˇr´ı proj´ızˇ dˇej´ı n´ahodnˇe po ´ mapˇe, ale hlavnˇe si mus´ı d´at pozor na zavalen´ı kamenem. Na diamanty 21
3. Sˇ UPAPLESK ˚ a kameny pusob´ ı gravitaˇcn´ı s´ıla“, kter´a je t´ahne smˇerem dolu˚ pokud pod ” nimi nen´ı jiny´ objekt. Hr´acˇ pˇri sv´em pohybu poj´ıd´a v poli veˇsker´e zˇ el´e, kter´e ˇ ˚ a diamantum ˚ v p´adu. Pr´avˇe nov´e mezery, kter´e zustali ˚ zabranuje kamenum ˇ ı p´ad kamenu˚ a diamantu. ˚ Mezera uvolnˇen´a po zˇ el´e na hrac´ım poli umoˇznuj´ ˇ ˚ padaj´ıc´ım objektem umoˇzn´ı p´ad dalˇs´ım vyˇ Casto ´ se um´ıstˇenym ´ objektum. se st´av´a, zˇ e hr´acˇ jedn´ım trivi´aln´ım pohybem spust´ı rozs´ahlou rˇ etˇezovou reakci a proto mus´ı kaˇzdy´ pohyb peˇclivˇe uv´azˇ it, aby neuv´ızl mezi kameny a nebo aby na nˇej nˇejaky´ nespadl. V kombinaci s protivn´ıky, jejichˇz dotyk hr´acˇ e okamˇzitˇe usmrt´ı, klade hra vysok´e n´aroky na koordinaci akc´ı a nut´ı hr´acˇ e aktivnˇe pˇremyˇ ´ slet o rˇ eˇsen´ı kaˇzd´e situace.
Obr´azek 3.1: Obr´azek ze hry
3.2
Prubˇ ˚ eh vyvoje ´
Pˇri vyvoji hry se cˇ asto mˇen´ı poˇzadavky na fin´aln´ı produkt. Kdyˇz se imple´ ˚ ze byt mentuje nov´a vlastnost, kter´a na pap´ırˇ e vypadala vybornˇ e, ve hˇre muˇ ´ ´ 22
3. Sˇ UPAPLESK nepouˇziteln´a. D´ıky tomu, zˇ e je to jev velmi cˇ asty, ´ nen´ı podle m´eho n´azoru vhodn´e pouˇz´ıt klasick´e metody tvorby software jako napˇr. Rational Unified Process[22]. Nejv´ıce mˇe oslovila technika agiln´ıho vyvoje Feature Driven De´ velopment (FDD)[21]. Jelikoˇz i samotny´ XNA Framework byl vyv´ıjen touto technikou nechal jsem se inspirovat a pouˇzil ji i pˇri vyvoji uk´azkov´e hry. ´ Po zad´an´ı bakal´arˇ sk´e pr´ace jsem zprovoznil issue tracking system Trac[4] s podporou moˇznosti uˇzit´ı jako intern´ı Wiki[28] a integrovanym ´ spr´avcem zdrojovych ´ souboru˚ Subversion[25]. Dalˇs´ım krokem bylo napl´anov´an´ı mi” lestones“. Snaˇzil jsem se drˇzet doporuˇcen´ı FDD a napl´anoval d´elku kaˇzd´e iterace na 14 dn´ı, po kter´e musela byt ´ k dispozici funkˇcn´ı aplikace s vytyˇce˚ ze zd´at vyuˇzit´ı tˇechto syst´emu˚ zbyteˇcnou nymi vlastnostmi. Jakkoliv se muˇ ´ komplikac´ı, dle m´eho n´azoru nen´ı. Komunikace mezi mnou a vedouc´ım pr´ace mohla byt ´ d´ıky dostupnosti informac´ı pˇres Trac omezena na mini˚ byly veˇsker´e probl´emy odstranˇeny mum a d´ıky kr´atkym ym ´ vyvojov ´ ´ cyklum ˚ jiˇz v z´arodku. V posledn´ı rˇ adˇe mus´ım ocenit spr´avu zdrojovych ´ souboru, kterou jsem vyuˇz´ıval nejen jako datovou z´alohu, ale tak´e jako prostˇredn´ıka pˇri sd´ılen´ı zdrojovych ´ textu˚ mezi v´ıce poˇc´ıtaˇci.
3.3
Hierarchie hern´ıch objektu˚
Cel´a hra se skl´ad´a ze tˇr´ı logickych ´ cˇ a´ st´ı. Prvn´ı je Mapa, kter´a obsahuje in˚ V Mapˇe jsou defiformace o hern´ı ploˇse a poˇca´ teˇcn´ım rozm´ıstˇen´ı objektu. ˚ kter´e nejsou aktu´alnˇe vidˇet a dalˇs´ı opnov´any operace na odstˇrel“ objektu, ” timalizace rˇ´ıd´ıc´ı poˇrad´ı vykreslov´an´ı hern´ıch objektu˚ nebo pad´an´ı kamenu˚ ˚ Druhou logickou cˇ a´ st´ı jsou hern´ı objekty. Ty jsou uspoˇra´ d´any a diamantu. ˚ ych ve stromov´e hierarchii podle svych ´ ruzn ´ vlastnost´ı. Tˇret´ı cˇ a´ st´ı je panel zobrazuj´ıc´ı se v lev´em horn´ım rohu. Ten pod´av´a hr´acˇ i informace o uply˚ Mapa, panel i vˇsechny hern´ı nul´em cˇ asu a o poˇctu sesb´ıranych ´ diamantu. objekty jsou potomkem tˇr´ıdy DrawableGameComponent z aplikaˇcn´ıho modelu XNA Frameworku. Jedinou registrovanou komponetnou v objektu typu Game je ale pouze Mapa. Z tohoto pohledu se d´a na Mapu nahl´ızˇ et jako na objekt reprezentuj´ıc´ı graf sc´eny. Na d´ale leˇz´ıc´ım diagramu tˇr´ıd jsou vidˇet vztahy mezi jednotlivymi ´ tˇr´ıda´ v anglick´em jazyce, proto i n´azvy kommi. Jsem zvykly´ ps´at zdrojov´e kody ponent jsou anglicky. Mapu a Panel jsem jiˇz popsal vyˇ ´ se, d´ale se budu ˚ vˇenovat hern´ım objektum. Vˇsechny objekty, kter´e ve hˇre vystupuj´ı jsou potomkem z´akladn´ı abstraktn´ı tˇr´ıdy GameTile. Tato tˇr´ıda implementuje vykreslen´ı objektu. Dˇed´ı z n´ı cˇ tyˇri potomci Food, End, Wall a MoveableGameTile. Prvn´ı tˇri reprezentuj´ı zˇ el´e, c´ıl a zed’. Jsou zasazeny pevnˇe v mapˇe a bˇehem 23
3. Sˇ UPAPLESK hry se nepohybuj´ı, pˇresto ale mohou interagovat s okol´ım. Abstraktn´ı tˇr´ıda MoveableGameTile reprezentuje vˇsechny objekty, kter´e mohou mˇenit v r´amci mapy svou pozici. Dˇed´ı z n´ı dalˇs´ı dvˇe abstraktn´ı tˇr´ıdy. Prvn´ı je FallableGame˚ kter´e mohou padat po mapˇe smˇerem dolu. ˚ Tile, obsahuj´ıc´ı chov´an´ı objektu, ˚ kter´e muˇ ˚ ze Druhou je ControllableGameTile, abstrahuj´ıc´ı chov´an´ı objektu, ovl´adat hr´acˇ nebo umˇel´a inteligence. Z tˇechto tˇr´ıd dˇed´ı d´ale tˇr´ıdy Diamond, ˚ diaStone, Avatar a Opponent, kter´e jiˇz plnˇe odpov´ıdaj´ı hern´ım objektum mantu, kameni, hr´acˇ ova avatara a protihˇra´ cˇ e.
24
3. Sˇ UPAPLESK
ˇ Obr´azek 3.2: Hierarchie hern´ıch objektu˚ ve hˇre Supaplesk 25
Kapitola 4
Z´avˇer Pr´ace s XNA a C# byla pro mne zaj´ımavou zkuˇsenost´ı. V minulosti jsem pouˇz´ıval na vyvoj her pˇredevˇs´ım Delphi, C++ a knihovny DelphiX, SDL, ´ OpenGL a vyzkouˇsel jsem si i pr´aci v hern´ıch RAD n´astroj´ıch typu GameEditor. S n´astroji od firmy Microsoft jsem mˇel dosud velmi malou zkuˇsenost, ale o to v´ıce mˇe pozitivnˇe pˇrekvapily. Oproti vyˇ ´ se zm´ınˇenym ´ knihovn´am ´ ˇ nen´ı nutn´e v XNA rˇ eˇsit n´ızkourov novou komunikaci s ovladaˇcem grafick´e ˇ ˚ soustˇredit se rovnou na karty a to umoˇznuje m´enˇe pokroˇcilym ´ vyvoj´ ´ arˇ um ´ samotnou hru. D´ıky C# a managed modu ve kter´em aplikace bˇezˇ ´ı pro mne ´ bylo psan´ı kodu daleko intuitivnˇejˇs´ı a sn´azeji jsem nach´azel chyby, kter´e jsem do programu zanesl. Na druhou stranu XNA Framework nen´ı aˇz tak ´ ˇ y, ˇ vysokourov nov naprogramov´an´ı sloˇzitˇejˇs´ıch technik, ´ aby znemoˇznoval nebo aby aplikace v nˇem napsan´e byli vyraznˇ e pomalejˇs´ı neˇz ty psan´e pˇr´ımo ´ na m´ıru dan´emu hardware. Dle m´eho n´azoru i menˇs´ı profesion´aln´ı tymy ´ ocen´ı platformu XNA, protoˇze jim umoˇzn´ı velmi levny´ vyvoj hry pro ale´ sponˇ dvˇe platformy. Naopak nejvˇetˇs´ı probl´em XNA je v nevyˇreˇsen´e distribuci her v nˇem vytvoˇrenych. Aktu´alnˇe plat´ı, zˇ e verzi hry pro operaˇcn´ı syst´em MS Windows ´ lze prod´avat, ale nen´ı jasn´e jak a za jakych ´ podm´ınek bude moˇzn´e prod´avat hry pro Xbox360. Jedinou moˇznost´ı jak nahr´at hru na Xbox360 je m´ıt k n´ı veˇsker´e zdrojov´e soubory a prov´est sestaven´ı pˇr´ımo na lok´alnˇe pˇripojenou konzoli. Oˇcek´av´a se, zˇ e tyto probl´emy vyˇreˇs´ı verze XNA Game Studio Professional, ale dosud nen´ı stanoveno ani datum vyd´an´ı a zˇ a´ dn´e dalˇs´ı informace o nˇem nejsou veˇrejnˇe dostupn´e. Dalˇs´ım velkym ´ otazn´ıkem je implementace XNA v Monu. Pokud se podaˇr´ı implementovat XNA v projektu Mono, stane se z XNA opravdu multiplatformn´ı prostˇred´ı a pro mˇe jasnym ´ favoritem pro vyvoj malych ´ ´ a stˇrednˇe velkych ´ her.
26
Literatura [1] Autodesk Inc. Autodesk FBX. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL www.autodesk.com/fbx. [2] NVIDIA Corporation. FX Composer 1.8. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://developer. nvidia.com/object/fx_composer_home.html. [3] Dalibor Kaˇcm´arˇ . Programujeme .NET aplikace ve Visual Studiu .NET. Computer Press, Praha, 2001. 329 s. [4] Edgewall Software. The Trac Project - Trac. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://trac. edgewall.org/. [5] Microsoft Corporation. Effects (Direct3D 9). [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://msdn2. microsoft.com/en-us/library/bb173329.aspx. [6] Microsoft Corporation. HLSL Shaders (Direct3D 9). [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://msdn2. microsoft.com/en-us/library/bb173493.aspx. [7] Microsoft Corporation. Microsoft Cross-Platform Audio Creation Tool (XACT). [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://msdn2.microsoft.com/en-us/ library/bb174772.aspx. [8] Microsoft Corporation. Microsoft DirectX: Home Page. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://www. microsoft.com/windows/directx/default.mspx. [9] Microsoft Corporation. .NET Framework Developer Center. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://msdn2. microsoft.com/en-us/netframework/default.aspx. 27
´ Eˇ R 4. Z AV [10] Microsoft Corporation. The Fixed Function Pipeline. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://msdn. microsoft.com/archive/default.asp?url=/archive/ en-us/directx9_c_Summer_04/directx/graphics/ programmingguide/fixedfunction/fixedfunction.asp. [11] Microsoft Corporation. Xbox 360 Controller for Windows. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://www.microsoft.com/hardware/gaming/ productdetails.aspx?pid=091. [12] Microsoft Corporation. XNA Creators Club Online. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://creators.xna. com. [13] Opengl.org. Opengl - The Industry’s Foundation for High Performance Graphics. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://www.opengl.org/. [14] Paul Bourke. Direct-X Format. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://local.wasp.uwa.edu.au/ ˜pbourke/dataformats/directx/. [15] The Khronos Group. The Khronos Group: Open Standards, Royalty Free, Dynamic Media T echnologies. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://www.khronos.org/. ˇ [16] Tom´asˇ Lamr. Supaplesk. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://www.fi.muni.cz/˜xlamr/ supaplesk/. [17] Wikimedia Foundation Inc. Audio Interchange File Format. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http: //en.wikipedia.org/wiki/AIFF. [18] Wikimedia Foundation Inc. Bounding Volume. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia. org/wiki/Bounding_volume. [19] Wikimedia Foundation Inc. Common Intermediate Language. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http:// en.wikipedia.org/wiki/Common_Intermediate_Language. 28
´ Eˇ R 4. Z AV [20] Wikimedia Foundation Inc. Common Intermediate Runtine. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http: //en.wikipedia.org/wiki/Common_Language_Runtime. [21] Wikimedia Foundation Inc. Feature Driven Development. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en. wikipedia.org/wiki/Feature_Driven_Development. [22] Wikimedia Foundation Inc. IBM Rational Unified Process. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en. wikipedia.org/wiki/Rational_Unified_Process. [23] Wikimedia Foundation Inc. Shader. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia.org/wiki/ Shader. [24] Wikimedia Foundation Inc. Sprite (computer graphics). [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en. wikipedia.org/wiki/Sprite_(computer_graphics). [25] Wikimedia Foundation Inc. Subversion (software). [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia. org/wiki/Subversion_(software). [26] Wikimedia Foundation Inc. Transformation matrix. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia. org/wiki/Transformation_matrix. [27] Wikimedia Foundation Inc. WAV. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia.org/wiki/ WAV. [28] Wikimedia Foundation Inc. Wiki. [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia.org/wiki/ Wiki. [29] Wikimedia Foundation Inc. XMA (audio format). [online], 2007. [cit. 2007-04-28]. Dokument dostupny´ na URL http://en.wikipedia. org/wiki/XMA_audio_format.
29
Dodatek A
Kompletn´ı minim´aln´ı aplikace using using using using using using using using
System ; System . C o l l e c t i o n s . Generic ; M i c r o s o f t . Xna . Framework ; M i c r o s o f t . Xna . Framework . Audio ; M i c r o s o f t . Xna . Framework . Content ; M i c r o s o f t . Xna . Framework . Graphics ; M i c r o s o f t . Xna . Framework . Input ; M i c r o s o f t . Xna . Framework . S t o r a g e ;
namespace Doom6Game { public c l a s s Doom6 : M i c r o s o f t . Xna . Framework . Game { GraphicsDeviceManager g r a p h i c s ; ContentManager c o n t e n t ; public Doom6 ( ) { g r a p h i c s = new GraphicsDeviceManager ( t h i s ) ; c o n t e n t = new ContentManager ( S e r v i c e s ) ; } p r o t e c t e d o v e r r i d e void I n i t i a l i z e ( ) { / / i n i c i a l i z a c e d a l sˇ ´ı c h komponent base . I n i t i a l i z e ( ) ; } p r o t e c t e d o v e r r i d e void LoadGraphicsContent ( bool l o a d A l l C o n t e n t ) { i f ( loadAllContent ) { / / z d e n a cˇ ´ı s t v e sˇ k e r e´ z d r o j e z ˜ ContentManager } / / z d e n a cˇ ´ı s t z d r o j e , k t e r e´ s i s p r a v u j i a budu / / s p r a v o v a t s a´ m b e z ContentManager }
30
´ ´I APLIKACE A. K OMPLETN´I MINIM ALN
p r o t e c t e d o v e r r i d e void UnloadGraphicsContent ( bool unloadAllContent ) { i f ( unloadAllContent ) { / / z d e u v o l n i t v e sˇ k e r e´ z d r o j e z e s p r a´ v y ContentManager c o n t e n t . Unload ( ) ; } / / z d e u v o l n i t v e sˇ k e r e´ z d r o j e , k t e r e´ j s e m s i s p r a v o v a l / / s a´ m b e z ContentManager } p r o t e c t e d o v e r r i d e void Update ( GameTime gameTime ) { / / s t i s k t l a cˇ ´ı t k a b a c k na gamepadu z p u˚ s o b ´ı u z a v rˇ e n ´ı a p l i k a c e i f ( GamePad . G e t S t a t e ( P l a y e r I n d e x . One ) . Buttons . Back == B u t t o n S t a t e . Pressed ) t h i s . E x i t ( ) ; / / z d e j e t rˇ e b a m´ı t v e sˇ k e r o u l o g i k u komponenty base . Update ( gameTime ) ; } p r o t e c t e d o v e r r i d e void Draw ( GameTime gameTime ) { g r a p h i c s . GraphicsDevice . C l e a r ( Color . CornflowerBlue ) ; / / z d e j e t rˇ e b a m´ı t v y k r e s l e n ´ı t e´ t o komponenty base . Draw ( gameTime ) ; } } }
31
Dodatek B
Obrazov´a pˇr´ıloha
ˇ Obr´azek B.1: Hra Supaplesk
ˇ Obr´azek B.2: Hra Supaplesk
32
Rejstˇr´ık .NET, 5 ˇ Supaplesk, 21 2D grafika, 12 3D grafika, 13 3D modely, 15 Aplikaˇcn´ı model, 8 Audio, 16 Content Importer, 7 Content Manager, 8 Content Pipeline, 6 Content Processor, 8 Creators club, 6 Cue, 17 DirectX, 5 DrawableGameComponent, 9 Efekty, 14 Effects, 14
Techniques, 14 Track, 17 Vektory, 19 Vertex Buffer, 14 vstup od uˇzivatele, 10 Wave Bank, 17 world space, 13 XACT, 16 Xbox360, 5 Xbox360 Controller, 10 XInput, 10 XMA, 17 XNA, 5 XNA Framework, 5 XNA Game Studio, 5 XNA Game Studio Express, 6 XNA Game Studio Professional, 6 Zvuk, 16
Feature Driven Development, 22 Fixed Function Pipeline, 14 Game, 9 GameComponent, 9 Grafika, 12 I/O, 20 Index Buffer, 15 Konzole, 5 Matice, 19 Mesh, 15 Model, 15 Mono, 6 Mono.XNA, 6 obalov´a tˇelesa, 19 object space, 13 projection space, 14 screen space, 14 Shaders, 14 Sound, 17 Sound Bank, 17
33