Microsoft XNA
Microsoft XNA je vývojářská platforma společnosti Microsoft umožňující snadný vývoj her v jazyce C# a Visual Basic pro herní platformy:[1]
Samotný název XNA není zkratkou s konkrétním významem, někdy je však uváděn význam XNA’s Not an Acronym.[2] Logo XNA obsahuje jako část písmena X grafické znázornění kódu Morseovy abecedy – ⋅ ⋅ –, který odpovídá písmenu X, po rozdělení – ⋅ odpovídá písmenu N a ⋅ – písmenu A.[1]
Součástmi XNA jsou XNA Game Studio a XNA Framework.[3]
XNA Framework
XNA Framework je soubor DLL, které obsahují knihovny tříd, určené pro vytváření her. Hlavní tři DLL a příslušné prostory jmen jsou následující:[3]
Microsoft.Xna.Game
Microsoft.Xna.Game zahrnuje třídy a rozhraní pro řízení a manipulaci samotné hry.[3]
Microsoft.Xna.Pipeline
Microsoft.Xna.Pipeline poskytuje prostředky pro vytváření a používání vlastních Content Pipeline.[3]
Microsoft.Xna.Framework
Prostor jmen Microsoft.Xna.Framework poskytuje funkcionalitu zejména v matematické a geometrické oblasti. Poskytuje například třídy pro vektory, obdélníky, body v 2D prostoru a matice ve 3D prostoru. Třída MathHelper poskytuje užitečné funkce pro matematické výpočty. Microsoft.Xna.Framework dále zahrnuje třídy pro přidávání a manipulaci se zvukem a hudbou, správu herního obsahu, typovou konverzi objektů a dat, práci s 2D nebo 3D grafikou, vstupy, datovými úložišti, pro vytváření multiplayer her.[3]
XNA Game Studio
XNA Game Studio je vývojové prostředí určené pro vývoj 2D a 3D her. XNA Game Studio je rozšířením vývojového prostředí Microsoft Visual Studio s podporou XNA Game Studio Framework a příslušných nástrojů. V rámci XNA Game Studio Framework jsou dodrženy návrhové vzory .NET Framework. Vývojové prostředí Microsoft XNA Game Studio poskytuje společnost Microsoft zdarma na svých stránkách.[1]
Verze XNA Game Studio
XNA Game Studio 1.0
Již od počátku je XNA Game Studio postaveno na DirectX 9. Původní podporované platformy jsou pouze Microsoft Windows a Xbox 360, oficiálně podporovaný jazyk C#.[1]
XNA Game Studio 2.0
Verze 2.0 přináší možnost konverze hry mezi formáty pro Windows a Xbox 360, možnost použití parametrů Content Pipeline procesorů. Síťová podpora pro Windows a Xbox 360 platformy, multiplayer her.[1]
XNA Game Studio 3.0
Verze 3.0 umožňuje využívat Xbox LIVE Community Games pro distribuci her pro Xbox 360 na Xbox LIVE Marketplace. Objevuje se zde podpora vývoje her pro Microsoft Zune, transparentní komprese a dekomprese obsahu (textury, shadery, modely). V XNA Framework API jsou to mimo jiné nástroje pro simulaci trial módu, správu informací o hráči zobrazovaných při hraní Xbox LIVE Community Games, herní pozvánky u her pro více hráčů.[1]
XNA Game Studio 3.1
Ve verzi 3.1 se objevuje podpora Avatarů – 3D animovaných charakterů pro reprezentaci hráčů na Xbox Dashboard; dále Xbox LIVE Party pro komunikaci hráčů bez ohledu na aktuální činnost, vložení a přehrávání videa nebo audia.[1]
XNA Game Studio 4.0
Verze 4.0 umožňuje navíc vývoj her pro Windows Phone. Od verze XNA Game Studio 4.0 je ve vývojovém prostředí k dispozici Windows Phone Emulator, který je softwarovou verzí prostředí Windows Phone. Windows Phone Emulator je platforma určená pro vývoj a debugging Windows Phone aplikací a umožňuje vývoj her i v případě, že vývojář nemá přístup k fyzickému zařízení Windows Phone.[1]
Tato verze také podporuje práci s XML soubory jako úložištěm herních dat, konfigurovatelné efekty pro všechny profily i platformy, zabudované stavové objekty, jednotné API pro vstupy pro všechny platformy, zachytávání audia a jeho přehrávání.[1]
XNA Game Studio 4.0 Refresh
Mezi nové funkce XNA Game Studio 4.0 Refresh patří podpora jazyka Visual Basic, podpora interoperability XNA a Silverlight, podpora síťové komunikace přes TCP/UDP sockety, podpora akcelerometrů a GPS simulace pro Windows Phone Emulator.[1]
Content Pipeline
Content Pipeline je jednou z nejzajímavějších vlastností XNA. Zjednodušuje a optimalizuje manipulaci s obsahem. Při vkládání do programu je pouze nutné použití vhodného content importeru pro daný typ obsahu. Content pipeline během kompilace zkonvertuje formáty importovaných souborů do interního formátu XNA.[1]
Importery podporují následující formáty souborů:[2]
Grafické profily
S XNA 4.0 je zaveden koncept profilů za účelem odstranění platformní závislosti kódu způsobené rozdílnými nároky na hardware jednotlivých typů zařízení. Profily umožňují cílit herní kód na určitý typ zařízení využitím podporovaných možností pouze pro vybraný profil. Profily Reach a HiDef se vzájemně liší zejména podporovanou verzí Shader Modelu, omezeními pro velikosti textur, Cubemap, počet vykreslovaných primitiv, podporovanými formáty textur, možností využití MRT (Multiple render targets).[3]
Reach profil
Profil pro podporu širšího spektra hardwarových zařízení. Podporuje zařízení Windows Phone 7, Xbox 360 a počítače s operačním systémem Microsoft Windows s GPU podporující DirectX 9.[3]
HiDef profil
Profil podporující výkonnější grafická zařízení. Mezi výkonnější zařízení patří zařízení Xbox 360 a počítače s operačním systémem Microsoft Windows a s GPU podporující DirectX 10 a vyšší.[3]
Struktura hry
Centrální logika pro každou hru tvoří prostředí, kde se hra spustí a dále běží ve smyčce, dokud nejsou splněna ukončující kritéria. Hra obsahuje následující základní metody:[2]
- Game1() – obecná inicializace (Game1.cs)
- Initialize() – inicializace hry (Game1.cs)
- LoadContent() – Nahrání (zpravidla grafických) zdrojů (Game1.cs)
- Update() – Čtení uživatelských vstupů, výpočty, testování podmínek pro ukončení hry (Game1.cs)
- Draw() – Kód pro vykreslení grafického výstupu (Game1.cs)
- UnloadContent() – Uvolnění zdrojů (Game1.cs)
2D grafika
Obvykle 2D hra sestává z grafického pozadí a prvků zvaných Sprites. Sprites jsou 2D grafické objekty manipulované nezávisle na zbytku scény. Rovněž lze využít i animované Sprites, kde se jednotlivé obrázky mění v závislosti na předdefinovaném časovém intervalu a tímto se vytváří iluze pohybu. Souřadný systém při vytváření 2D scény má počátek (0,0) v levém horním rohu obrazovky.[2] Pro vykreslování textu, tedy vytvoření 2D obrázku na základě požadovaného textu, slouží objekt SpriteFont, reprezentující font definovaný prostřednictvím XML souboru .spritefont.[3]
3D grafika
Je možné vykreslovat nejen 3D grafická primitiva, ale také 3D modely, nahrané z příslušných souborů. Při vykreslování 3D grafiky se uplatňuje 3D Graphics Pipeline. Umožňuje nahrání zdrojů a renderování 3D scény s využitím efektů. Sestává z následujících součástí:[1]
- Transformační matice
- Vertex Buffer
- Efekt
Transformační matice
Matice World, View a Projection pro transformování 3D vrcholů do 2D prostoru.[1]
Vertex Buffer
obsahující geometrická data pro renderování, konkrétně jejich souřadnice ve 3D prostoru, ale také další popisné informace jako normála vrcholu, barva, texturovací souřadnice. Vertex buffery obsahuje indexovaná nebo neindexovaná data vrcholů. Neindexovaná data představují vrcholy v bufferu umístěné právě v pořadí, v jakém budou vykreslovány. Indexované buffery obsahují seznam ukazatelů do vertex bufferu a udávají tak pořadí, v jakém mají být vrcholy vykresleny.[1]
Efekty
XNA Game Studio rozšiřuje možnosti renderování scény o tzv. efekty. Efekty jsou k dispozici pro všechny podporované platformy. Pro Windows Phone je však možné využívat pouze konfigurovatelné efekty.[1]
Konfigurovatelné efekty
Konfigurovatelné efekty jsou zabudované a optimalizované efekty pro všechny platformy, včetně Windows Phone, kde je efektivita běhu na GPU klíčová. Tyto efekty nevyžadují znalost jazyka shaderů HLSL, lze je konfigurovat nastavováním hodnot parametrů v rámci kódu hry. V XNA Game Studio 4.0 lze využívat pět zabudovaných konfigurovatelných efektů:[1]
- Basic Effects – základní efekt pro transformace a základní osvětlení, přidávání zdrojů osvětlení, mlhy, textur
- Dual Texture Effects – používají se dvě textury s nezávislými texturovacími souřadnicemi
- Alpha Test Effects – implementuje alpha testing pro účel aktualizace pixelů, které mají být vykreslovány
- Skinned Effects – slouží pro manipulaci 3D objektem – modelem, pro pohyb nebo deformaci zejména za účelem animace a instancování
- Environment Map Effects – využívá textury a cube map textury, používá se v případě, že se na povrchu objektu odráží okolní prostředí scény
Programovatelné efekty
Pokročilou možností ovlivnění renderování scény je využití vlastních efektů. Vlastní efekty jsou připojeny k hernímu obsahu v podobě souboru efektu s příponou .fx a obsahují kód shaderů v jazyce HLSL. Programovatelný efekt sestává z vertex shaderu a pixel shaderu a techniky, která tyto shadery volá. Vertex shader inicializuje zpracovávání jednotlivých vrcholů a pixel shader zpracování jednotlivých pixelů.[1]
V herním kódu je nutné před použitím pro vykreslování nahrát efekt do programu prostřednictvím metody ContentManager.Load pro vytvoření objektu efektu a předat potřebné parametry (povinně WorldViewProj který obsahuje transformační matici pro manipulaci vrcholů ve scéně) a nastavit techniku, která se má použít, obsahuje-li shader více technik pro vykreslování scény.[1]
Vstupy
V XNA Game Studio je nedílnou součástí vývoje her zpracovávání uživatelských vstupů prostřednictvím vstupních zařízení dostupných na dané platformě:[1]
- Windows Phone – GamePad omezeně (pouze Back), klávesnice, TouchPanel, akcelerometr, mikrofon
- Xbox 360 – GamePad, klávesnice, mikrofon
- Windows – GamePad, klávesnice, myš, mikrofon
- Zune – Zune pad mapovaný na GamePad, klávesnice[4]
Klávesnice
Klávesnice nemusí být fyzicky přítomna na daném zařízení (Windows Phone, Xbox 360), a proto by se při vývoji her pro tato zařízení měl uvažovat vstup ze softwarové klávesnice SIP (software input panel), kterou je možné vyvolat v herním kódu.[1]
Myš
Na platformě Windows je možné získat údaje o pozici kurzoru myši v herním okně a stavu tlačítek myši. Pro Windows Phone je jako myš uvažován jediný, první bod dotyku.[1]
TouchPanel
Multitouch vstupy jsou zpracovávány jako raw data poskytovaná třídou TouchPanel. Lze využít podporu pro detekci typu dotykového gesta v rámci předdefinovaných gest.[1]
Akcelerometr
Vstup z akcelerometru není v rámci XNA Game Studio 4.0 podporován a je nutné jej zpracovávat jako senzorický vstup prostřednictvím Microsoft.Devices.Sensors.[1]
GamePad
GamePad se využívá pro práci se vstupy z Xbox 360 ovladače. Lze však uvažovat další, alternativní vstupy. Tyto jsou z hlediska herního kódu mapované na standardní Xbox 360 GamePad. Mezi tato vstupní zařízení patří například Alternate Guitar, Arcade Stick, Big Button Pad, Dance Pad, Drum Kit, Flight Stick, Gamepad Guitar, Wheel.[1] Na Zune je obdobně mapováno vstupní zařízení Zune pad na standardní GamePad.[4]
Vývojářská komunita
Na webových stránkách App Hub vývojářské komunity jsou k dispozici materiály pro výukové účely – dokumentace a vzorové příklady. Po registraci je možné své vlastní hry prodávat či poskytovat zdarma na Windows Phone Marketplace nebo Xbox LIVE Marketplace.[1]
Odkazy
Reference
- MSDN-the microsoft developer network
- Alexandre Santos Lobão; et al: Beginning XNA 3.0 game programming : from novice to professional, Apress, 2009
- Aaron Reed : Learning XNA 4.0, O'Reilly Media, Inc., 2010
- Dan Waters: Zune Game Development Using XNA 3.0, Apress, 2009
Externí odkazy
- (anglicky) App Hub – oficiální webové stránky vývojářské komunity
- (anglicky) MSDN – MSDN Library, zdroj informací pro vývojáře využívající nástroje společnosti Microsoft
- (anglicky) Shawn Hargreaves Blog – Blog Shawna Hargreavese, jednoho z tvůrců XNA