Is XNA geschikt voor serious games?

Vergelijkbare documenten
Veel succes! 1. Gegeven is de volgende klasse:

Versturen van vanuit een Delphi VCL toepassing

Een eerste applicatie

Windows 8, Windows 8.1, deel II

Werkomgeving. Android Studio. Android - werkomgeving 1/6

Datatypes Een datatype is de sort van van een waarde van een variabele, veel gebruikte datatypes zijn: String, int, Bool, char en double.

HET BESTURINGSSYSTEEM

Inhoud Inhoud. Over dit boek 7. 1 Eclipse IDE (Integrated Development Environment) 9. 2 Functionele specificatie 13

Leg de CD-rom Solid Edge ST3 in de cd-drive van je computer. Normaal verschijnt volgend kader vanzelf.

Handleiding Sportlink Club

Eerste deeltentamen Gameprogrammeren Vrijdag 25 september 2015, uur

Installatie van sqlserver

De Kleine WordPress Handleiding

Website bouwen met frontpage

Inleiding Het adres Hoe werkt ? Je adres registreren Aanmelden bij Outlook Schermonderdelen...

Cursus DropBox. Installeren. Waar haal ik het? Surf naar en klik op de grote downloadknop.

Verkleinen- en uploaden van beelden

Derde deeltentamen Gameprogrammeren Vrijdag 7 november 2014, uur

Outlookkoppeling installeren

Bij het opstarten van Small Basic verschijnt er de onderstaande werkomgeving.

Rhino: Back-up maken. RsyncBackup

Veel succes! 1. Deze opgave bestaat uit een aantal deelvragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

Handleiding CMS EWall

1 van :43

Voor de database wordt een Access 2000 bestand gebruikt, met voorlopig 1 tabel:

Voorzie iedere pagina van een titel. Je kan de titel uit het menu aanhouden. Een titel voeg je toe als volgt: 1. Klik op Element toevoegen.

Handleiding JCreator. Inhoud. Een Workspace en een eerste project maken

Aanvullende toets Gameprogrammeren Woensdag 5 januari 2011, uur

Achtergrond en lettertype Opmaak Achtergrond Opmaak Achtergrond Afbeelding in achtergrond

Installatie SQL: Server 2008R2

HANDLEIDING DMS Plugin Installatie, configuratie & werking

BRICONweb voor de club

Handleiding voor Zotero versie 2.0

Website met Wordpress

Handleiding Wordpress

ScanSnap 1. ScanSnap: installatie en instellingen. 1.2 Instellingen van de ScanSnap manager. 1.1 Installatie van de meegeleverde software

Snel op weg met Solid Edge ST5

Handleiding installeren en wijzigen handtekening

Werken met het DOS commando Fdisk

Installatie uitleg van de update van DK7

I. Vorming 4-5 (3&10/05/2012)

Inventus Software. Antum Secured Mail / Message System. Gebruikershandleiding

Installeren van het programma:

Mach3Framework 5.0 / Website

Labo 2 Programmeren II

Derde deeltentamen Gameprogrammeren Vrijdag 9 november 2012, uur

Inhoudsopgave: Whisper380-computerhulp

Veel succes! 1. Deze opgave bestaat uit een aantal vragen. Houd het antwoord kort: één of twee zinnen per onderdeel kan al genoeg zijn.

ScanSnap S ScanSnap: installatie en instellingen. 1.1 Installatie van de meegeleverde software. 1.2 Instellingen van de ScanSnap manager

1.1 Installatie Solid Edge ST6

Programmeren: Visual Basic

Installatie SQL Server 2014

Inhoudsopgave: Whisper380-computerhulp

Handleiding voor de installatie van Robobridge

HANDLEIDING INFOGRAPHIC SOFTWARE Versie 2.3 / jan 2014

Uitwerking Aanvullend tentamen Imperatief programmeren Woensdag 24 december 2014, uur

Handleiding website Pax Christi

Wat leuk dat je wilt werken met Glogster ( Maar wat is het?

Handleiding Icespy MR software

1.1 Installatie Solid Edge ST3

Deel 1: PowerPoint Basis

HANDLEIDING. WordPress LAATSTE VERSIE: RODER!CKVS WEBDESIGN & WEBHOSTING

HANDLEIDING VIEW DESKTOP. Handleiding VIEW Desktop. P. de Gooijer. Datum: Versie: 1.3

HANDLEIDING PROGRAMMEREN IN PASCAL (LAZARUS)

Handleiding voor het installeren van en werken met Skype

Welkom bij mijn website tutorial (Deel 2)

Inhoud. Endnote X7 Handleiding Mediacentrum maart 2015 Page 2

Handleiding Digitaal Aanvraagformulier

Hoe moet je een prachtige presentatie maken?

Beknopte handleiding Overhoor NL (Efka-soft)

Een stop-motion film maken

Tweede deeltentamen Gameprogrammeren Vrijdag 17 oktober 2014, uur

OneDrive voor bedrijven en scholen

Rabo CORPORATE CONNECT. Certificaatvernieuwing

mymanualsolarapp - What s Your Solar Power Today?

Installatie- en gebruikshandleiding Risicoverevening. 11 april 2007 ZorgTTP

Als je geen -adres hebt kun je bij Google een gmail account aan maken. Als je niet weet hoe dat moet klik dan op: Gmail account aanmaken

Handleiding CMS Online Identity Webontwikkeling. Handleiding CMS

Werking van de Office Connector, en het oplossen van fouten.

BEGINNER JAVA Inhoudsopgave

Inhoudsopgave: Inhoudsopgave:... 2 Waar moet uw pc aan voldoen?... 2 De installatie:... 4 De computer gereed maken voor gebruik:...

Minimale eisen voor de computer

MEDIA NAV navigatiesysteem Handleiding voor het downloaden van content via internet

HTML Graphics. Hans Roeyen V 3.0

QUESTI OPSTARTGIDS ALGEMENE INSTELLINGEN EN LVS

design ook items uitsnijden

Beginnersles 2 Computerles Windows 7

Cursus Onderwijs en ICT. Programmeren met Visual Basic

voor Blender v2.42a Software Box Bas van Dijk v1.1 februari 2007

Symbol for Windows BlissEditor

Contents. GfK Internet Monitor v3 1

Vergelijkingseditor 2007

Game Maker: Avonturier en skelet

Installatiehandleiding FWG 3.0/ Stand-alone / Netwerkversie. Nieuwe Installatie van FWG 3.0/ met een MS Access database

Inhoudsopgave. Whisper380-computerhulp 2

Werken met ActiveX (COM) componenten in.net

Installatie SQL Server 2008R2

Transcriptie:

TM Is XNA geschikt voor serious games? Academiejaar 2007-2008 Eindwerk voorgedragen door Jens Wouters tot het behalen van het diploma Bachelor in de Grafische en Digitale Media, afstudeerrichting Multimediaproductie. Interne Promotor: Externe Promotor: Dhr. De Pauw-Waterschoot Philippe Dhr. Kets Brecht Arteveldehogeschool Opleiding Grafische en Digitale Media Industrieweg 232 9030 Mariakerke Lid van de Associatie Universiteit Gent

Is XNA geschikt voor serious games? TM Eindwerk voorgedragen door Jens Wouters tot het behalen van het diploma Bachelor in de Grafische en Digitale Media, afstudeerrichting Multimediaproductie. Interne Promotor: Externe Promotor: Dhr. De Pauw-Waterschoot Philippe Dhr. Kets Brecht Academiejaar 2007-2008 Arteveldehogeschool Opleiding Grafische en Digitale Media Industrieweg 232 9030 Mariakerke Lid van de Associatie Universiteit Gent

Woord vooraf Games zijn al altijd één van mijn grootste interesses geweest. Aangezien ik later in de game-industrie werkzaam wil zijn, had ik besloten om een onderwerp te kiezen die verband hield met games. Na een paar mogelijkheden te hebben afgewogen, heb ik gekozen voor XNA. De zoektocht naar een externe promotor is via via verlopen. Zo had ik eerst Microsoft gecontacteerd, maar daar kreeg ik de melding dat ze mij niet konden helpen. Nadat ik een oproep had gedaan op het 9lives forum, had Killgore mij de raad gegeven om contact op te nemen met de organisatie BGIn. Daar heeft CEO Tommy Goffin voor mij contact opgenomen met Walter Stiers, op dat moment nog medewerker van Microsoft Belgium en lid van Microsoft s Academic Relations Team BeLux. Walter Stiers heeft mij dan de gegevens van 3 personen doorgegeven die ik het beste kon contacteren. Dit waren Brecht Kets (lector game design aan de HOWEST - departement PIH), Ir. Riemer Grootjans (PHD-student aan de VUB) en Loic Dansart (hobby game developer en maker van het spel Little Gamers). Uiteindelijk wou Brecht Kets mijn externe promotor wel zijn. Bij deze wil ik al deze mensen bedanken en zeker Brecht Kets voor de steun bij het schrijven van het eindwerk. Als deel van mijn onderzoek ben ik ook naar het XNA 2.0 launch event geweest. XNA stond natuurlijk centraal, maar er waren ook sprekers die in de game-industrie werkzaam zijn. Na dit event heb ik nog meer zin gekregen om in de gamesector te werken. Graag wil ik alle bedrijven en mensen bedanken die hebben meegeholpen aan mijn onderzoek in verband met serious games. Natuurlijk wil ik ook nog mijn ouders, Sabine Van de Sompele en Jozef Wouters, bedanken om mij de mogelijkheden te bieden om deze opleiding te kunnen volgen en het eindwerk te financieren. Vervolgens ben ik mijn zus, Yn Wouters, dankbaar voor het verbeteren van het schrijfwerk, ondanks dat de technische delen Chinees voor haar waren. Tenslotte wil ik ook nog mijn interne promotor Philippe De Pauw-Waterschoot bedanken. Woord vooraf

Inhoudsopgave Inleiding Deel I : XNA Hoofdstuk 1 : Wat is XNA? 1.1 XNA Framework 1.2 Tools 1.3 IDE : Game Studio Hoofdstuk 2 : Geschiedenis Hoofdstuk 3 : XNA basic file Hoofdstuk 4 : Content Pipeline Hoofdstuk 5 : Grafische Mogelijkheden 5.1 2D 5.1.1 Afbeeldingen 5.1.2 Tekst 5.2 3D 5.2.1 Assenstelsel 5.2.2 3D en matrices 5.2.3 3D plaatsen en weergeven 5.2.4 3D in XNA Hoofdstuk 6 : Audio (XACT) 6.1 XACT, het programma 6.2 Geluid in XNA Hoofdstuk 7 : Xbox 360 Hoofdstuk 8 : Voorbeeld Game : Rat Maze 8.1 Input 8.2 Muurdetectie Deel II : XNA & serious games Hoofdstuk 9 : Wat zijn serious games? Hoofdstuk 10 : Onderzoek : Is XNA geschikt voor serious games? Deel III : Algemeen besluit 3 5 6 7 7 8 9 11 17 19 19 19 21 22 22 23 25 25 29 29 31 34 35 36 37 38 39 41 43 Inhoudsopgave I

Bronnen Bijlagen A. Systeemvereisten & installatie B. XNA Basic File Game1.cs (code) C. Afbeeldingen & Tekst (code) D. Transformatiematrices E. 3D in XNA (code) F. Geluid in XNA (code) 45 47 Inhoudsopgave II

Inleiding Om de probleemstelling beter te begrijpen, is het misschien beter dat er eerst een korte uitleg volgt over XNA en serious games. Wat beide exact inhouden kun je lezen in Hoofdstuk 1, respectievelijk Hoofdstuk 9. Voorlopig volstaat het hier om te weten dat XNA een makkelijkere en goedkopere manier is om games te maken voor zowel Windows als Xbox 360 en dat serious games een ander doel hebben dan pure entertainment. Is XNA geschikt voor serious games? Serious games zijn enorm in populariteit aan het toenemen. Daar zij niet altijd veel budget nodig hebben en soms in een zeer korte tijdspanne gemaakt dienen te worden, kan XNA hier eventueel een oplossing bieden. Of dit zo is kun je lezen in Deel II. Om de onderdelen uit Deel I te begrijpen, is het handig dat je vertrouwd bent met programmeren en het liefst nog met de programmeertaal C#. De code is echter telkens op een zo makkelijk mogelijke manier uitgelegd. Ondanks dat veel programmeurs de voorkeur hebben om klassen, variabelen en methodes te benoemen via een Engelse naam (omdat de programmeertalen in het Engels zijn), wordt er toch gebruik gemaakt van Nederlandse benamingen zodat alles toch iets eenvoudiger te lezen valt. Deel I geeft uitleg over wat XNA is en wat je ermee kan doen. Gezien de beperkte omvang van het eindwerk is het niet mogelijk om alles uit te leggen. Er is getracht om de basis uit te leggen zodat je zelf aan de slag kunt. Er is reeds een grote community online waar je de nodige info kunt vinden. Vergeet ook niet de product informatie ( = help, F1) erop na te lezen, deze bevat soms de complete uitleg over hoe je iets moet doen. Deel II behandelt naast het onderzoek ook een beknopte theorie over serious games. Het onderzoek is gebaseerd op meningen en feiten van zowel mensen uit de game-industrie als de mensen die geïnteresseerd zijn in games. Aangezien XNA oorspronkelijk bedoeld is voor studenten en hobbyisten, kan ook hun mening niet achterwege blijven. Deel I en Deel II zijn min of meer onafhankelijk van elkaar. Deel I hoeft niet te worden gelezen om Deel II te begrijpen. Dit eindwerk kan handig zijn voor mensen die zich dezelfde vraag stellen die hier behandeld wordt, of zelfs voor mensen die enkel iets willen weten over XNA of over serious games. Op het ogenblik dat dit eindwerk geschreven wordt, is XNA aan zijn 2 de versie toe : XNA 2.0. Dit is dus ook de versie waarin de voorbeelden geschreven zijn. Er is veel kans dat het moment waarop je dit leest, er reeds een nieuwe versie van XNA beschikbaar is, want XNA evolueert razendsnel. Het zou geen grote problemen met zich mogen meebrengen om de in dit eindwerk gebruikte code om te zetten in een nieuwe XNA versie. Bij de overschakeling van XNA 1.0 Refresh naar XNA 2.0 was er trouwens een tool beschikbaar die 1.0 bestanden 2.0-compatibel maakte. Elke nieuwe versie zal wel over zo n tool beschikken. Hier en daar moet je echter wel handmatig aanpassingen doen om het volledig compatibel te maken. Inleiding 3

In het eindwerk wordt gesproken over games en niet over computerspelletjes. Het woord game is in de loop der de tijd bij de gamers (computerspelletjesspelers) ingeburgerd geraakt. Het woord spel wordt meer gebruikt om een fysiek spel aan te duiden (tikkertje, kaarten, gezelschapspelen, ). BELANGRIJK : vooraleer je de bestanden test, is het aangeraden om minstens de XNA Runtime of de complete XNA Game Studio geïnstalleerd te hebben, want anders zullen de bestanden niet uitgevoerd kunnen worden. Wil je zelf ontwikkelen, dan kun je terugvinden welke programma s je nodig hebt in bijlage A. Systeemvereisten & installatie. De gratis downloads vind je ook terug op de cd-rom in de map Downloads. Alle code kun je terug vinden op de cd-rom in bijlage. Het is aangeraden om alle code op je harde schijf te plaatsen vooraleer je zelf wilt debuggen. Er worden dan bestanden aangemaakt en deze kunnen natuurlijk niet op de cd-rom weggeschreven worden. Tijdens het debuggen bouw je je game eerst op. Dit wordt een build genoemd. Je kan ook een build laten uitvoeren zonder dat je de game hierna opstart. Dit kun je doen via Build > Build Solution of door gewoonweg F6 in te drukken in Visual Studio. Dit kan handig zijn om je game op code fouten te controleren zonder dat de game opgestart moet worden. Indien je echter gewoon de resultaten wil zien die de code voortgebracht heeft, dan kun je terecht bij elke solution op de locatie Solution Root > bin > x86 > Debug > GameNaam.exe. Bij de voorbeeldgame kun je dit echter niet doen omdat de game tijdens het lopen bestanden opslaat. Deze moet dus op de harde schijf opgeslagen worden. Het eindwerk is ook op de cd-rom te vinden in PDF formaat, handig als je iets specifiek wil vinden. Je kan dan Ctrl + F gebruiken om te zoeken. Inleiding 4

Deel I : XNA

Hoofdstuk 1 : Wat is XNA? XNA, deze drie letters ben je nu toch al enkele keren tegengekomen, maar waar staan ze nu eigenlijk voor? De drie letters X, N en A zijn een afkorting voor XNA s Not Acronymed, wat dus wil zeggen dat XNA helemaal geen afkorting is! Het kind had gewoon een naam nodig en dit is dus gewoonweg XNA geworden. De X is waarschijnlijk afkomstig van het meer gekende DirectX en aangezien men niet op een goede naam kwam voor de nieuwe technologie, heeft men dan maar voor XNA gekozen. Wat het verband is tussen DirectX en XNA kun je lezen in Hoofdstuk 2. Nu je weet wat de afkorting betekent, is het tijd voor het echte werk : XNA, de technologie. XNA is eigenlijk een zeer ruime term en duidt op alles wat Microsoft produceert die verband houdt met game developers. XNA is echter meer gekend onder de vorm zoals hieronder volgt en wordt dan ook zo behandeld in de rest van het eindwerk. XNA is een set van tools om een game te ontwikkelen. Het bestaat uit drie belangrijke onderdelen: het XNA Framework; een aantal tools; een IDE, namelijk XNA Game Studio. Het is oorspronkelijk ontworpen voor studenten, hobbyisten en beginnende game developers. Vandaar de (betrekkelijke) eenvoud ervan. Betrekkelijke staat tussen haakjes omdat niet alles op één plaats geregeld wordt en dit voor sommige mensen ingewikkeld kan zijn. Het grote voordeel van XNA is dat het de eerste technologie is die het mogelijk maakt om makkelijk te ontwikkelen voor een console. Games voor consoles kun je niet zomaar beginnen schrijven, laat staan erop uitvoeren. Je hebt hiervoor een SDK (Software Development Kit) nodig die je pas krijgt als je toestemming hebt gekregen van de consolefabrikant om games voor zijn platform te ontwikkelen. Niet (meer) dus voor de Xbox 360. Let wel : de Xbox 360 SDK, XDK (Xbox Development Kit) genaamd, bestaat wel nog. Zoals eerder vermeld : XNA is ontworpen met meer onervaren mensen in het achterhoofd. In de toekomst zullen misschien professionele gamebedrijven XNA wel gaan gebruiken al dan niet in samenwerking met andere technologieën. Het ontwikkelen voor de Xbox 360 met XNA heeft wel een prijskaartje. Vooraleer je het game op de Xbox 360 kunt testen en spelen moet je lid zijn van de XNA Creators Club en dit kost $99 voor één jaar en $49 voor 4 maand. Voor een student is er gelukkig wel een oplossing : Microsoft Dreamspark. Microsoft biedt tal van producten gratis aan studenten aan zolang ze maar kunnen bewijzen dat ze student zijn. Voor meer info, surf naar https://downloads.channel8.msdn.com/. H1 : Wat is XNA? 6

1.1 XNA Framework Het hart van het complete XNA gebeuren is het XNA Framework. Dit framework is verantwoordelijk voor het beheren en uitvoeren van de games, bevat een klasse bibliotheek en zorgt voor een stabiele omgeving om de game te laten lopen. Het framework is een API (Application Programming Interface), het bepaalt hoe het ene computerprogramma kan communiceren met het andere computerprogramma. Het XNA Framework is gebaseerd op het krachtige en succesvolle.net 2.0 framework, die de dag van vandaag voor tal van applicaties op pc gebruikt wordt. Het XNA Framework is dan wel gebaseerd op het.net 2.0 framework, maar het is weldegelijk helemaal vanaf nul opgebouwd. Het Framework bestaat uit 3 delen: XNA Graphic Engine : Microsoft.Xna.Framework.dll; XNA Game Application Model : Microsoft.Xna.Framework.Game.dll; XNA Content Pipeline : Microsoft.Xna.Framework.Content.dll. Dit zijn alledrie dll s. Ondanks dat het eerste deel XNA Graphic Engine genoemd wordt, bevat deze alle types en functies die te maken hebben met content. Met content wordt hier bedoeld : afbeeldingen, muziek, 3D models, Ook types en functies omtrent opslaan van bestanden en input zijn hierin opgeslagen. De XNA Game Application Model bevat dan weer alle types en functies die te maken hebben met het laten lopen van een game. De Content Pipeline wordt uitgelegd in Hoofdstuk 4. Het framework idee is zeer handig om mee te ontwikkelen, maar als je een game aan iemand anders wil geven, heeft die wel de runtime van het framework nodig, anders zal het niet werken. 1.2 Tools Bij het installeren worden ook enkele tools op je pc geplaatst. Deze zijn : XNA Game Studio Command Prompt; XNA Framework Remote Performance Monitor for Xbox 360; XACT *; XACT Auditioning Utility *. * : deze twee tools zijn eigenlijk niet ontwikkeld voor XNA. Deze zijn oorspronkelijk afkomstig uit de XDK (Xbox Development Kit) XNA Game Studio Command Prompt Voor wie lekker old-school wil programmeren, is er de XNA Game Studio Command Prompt. Je kan je games schrijven in een tekstverwerker (bijvoorbeeld Kladblok) en dan via de Command Prompt laten compileren en opstarten. Als je dit doet, moet je echter met heel wat dingen rekening houden en ben je eigenlijk beter om alles te doen via Visual Studio (die doet alles voor jou). H1 : Wat is XNA? 7

XNA Framework Remote Performance Monitor for Xbox 360 Deze tool dient om de performantie te analyseren van een game die op de Xbox 360 draait. Zo kun je onderzoeken of je game goed draait op de Xbox 360 of als het teveel werk vraagt van de hardware. XACT XACT is een programma die gebruikt wordt om geluid in XNA te kunnen gebruiken. Meer uitleg hierover in Hoofdstuk 6. XACT Auditioning Utility Deze kleine tool opent een command prompt venstertje waar je aanvankelijk niks in kunt doen. Wat het precies doet, kan je vinden in Hoofdstuk 6. Wat er wel al kan gezegd worden : het heeft iets te maken met XACT 1.3 IDE : Game Studio IDE betekent Integrated Development Environment, een software ontwikkel omgeving. Dit is het onderdeel van XNA waar je het meeste van jouw tijd zal doorbrengen. Het is een soort plug-in die Visual Studio uitbreidt om er XNA games mee te kunnen maken. Oorspronkelijk, ten tijde van XNA 1.0, was deze plug-in enkel toepasbaar op Microsoft Visual C# 2005 Express Edition, een gratis, maar meer beperkte versie van Visual Studio 2005. Door de grote vraag van veel mensen om XNA compatibel te maken met Visual Studio, hebben de ontwikkelaars besloten om bij de volgende versie van XNA ervoor te zorgen dat dit ook het geval was. XNA loopt zelfs op een groot aantal versies van Visual Studio 2005 (mits de Service Pack 1 voor Visual Studio geïnstalleerd is). Visual Studio 2008 is ook reeds verschenen, maar de compatibiliteit hiermee zal voor een latere versie van XNA zijn. Visual Studio 2005 is een krachtige programmeeromgeving (IDE), maar niet gratis. Natuurlijk is men niet uit het oog verloren dat XNA oorspronkelijk ook bedoeld was voor studenten en hobbyisten. Het is dus nog steeds mogelijk om te werken met XNA via de gratis IDE Visual C# 2005 Express Edition. XNA Game Studio is jouw visuele contact met het XNA Framework. Hier zal je je gehele project organiseren en alle code schrijven om jouw game te doen werken. Aangezien het een plug-in is voor Visual Studio, biedt het ook de hulpmiddelen die Visual Studio biedt zoals IntelliSense, verschillende kleuren voor stukken code met een specifieke betekenis en natuurlijk de Debug functie. Hiermee kan je je game laten testdraaien. Het game wordt gecompileerd en uitgevoerd. Als er zich problemen voordoen zal Visual Studio deze melden en eventueel zelfs in de code aanduiden. H1 : Wat is XNA? 8

Hoofdstuk 2 : Geschiedenis Vooraleer we aan de slag gaan met XNA is het misschien wel interessant om eens te weten waar XNA eigenlijk vandaan komt. Ten tijde van DOS moesten game programmeurs low-level code schrijven om de hardware aan te spreken. Een moeilijke opdracht, vanwege de mogelijke verschillen in hardware die konden voorkomen. Toen kwam Windows 95 op de markt. Dit operating system had een beveiligd geheugen model waardoor programmeurs niet meer rechtstreeks de hardware konden aanspreken en dit kon wel eens performantie problemen opleveren. Als antwoord hierop heeft Microsoft DirectX ontwikkeld. DirectX loste niet enkel het probleem van het beveiligd geheugen op, maar maakte het ook mogelijk om hardware-onafhankelijk te programmeren. Een aantal versies van DirectX zijn verschenen, met DirectX 9 de laatste voor Windows XP en DirectX 10 de recentste op het ogenblik dat dit eindwerk geschreven wordt. DirectX 9 is de basis geweest voor Managed DirectX, een API die het mogelijk maakte voor.net programmeurs om de werking van de DirectX structuur zichtbaar te maken en gebruik te maken van de DirectX functionaliteiten. Toen men begon aan de ontwikkeling van XNA heeft men de basis van Managed DirectX gebruikt. XNA is echter niet op Managed DirectX gebouwd, maar wel degelijk van de grond af aan opgebouwd. De eerste vermelding van XNA was op de Game Developers Conferende in 2004. Daarna duurde het echter tot 2006 vooraleer men er meer over vernam. Toen lanceerde Microsoft de Microsoft XNA Build March 2006 CTP. Dit was een complexe tool die het mogelijk maakte om de productie van een programma te beheren. Later dit jaar werd op 30 augustus XNA Game Studio Express beta 1 gereleased. Dit was de eerste keer dat de mensen zich een goed beeld konden vormen van het tot op dit moment duistere begrip XNA. De beta bevatte één starter kit, Space Wars en 3D mogelijkheden waren aan de magere kant. Een volgende beta werd vrijgegeven in november 2006 en in december werd dan uiteindelijk het volledige programma gereleased : XNA Game Studio Express. Op 24 april 2007 volgde een update, namelijk XNA Game Studio Express 1.0 Refresh. Op 13 december 2007 werd XNA Game Studio 2.0 losgelaten op het publiek en is op het ogenblik van het schrijven van dit eindwerk de nieuwste versie. Wel is er reeds een melding van het verschijnen van XNA 3.0. Tijdens het verschijnen van 1.0 was er ook sprake dat er een professional versie van XNA op de markt zou komen. De professional versie is uiteindelijk niet verschenen. Als je wil kan je eventueel stellen dat naargelang je Visual C# 2005 Express Edition of Visual Studio 2005 gebruikt, je in het eerste geval bezig bent met de niet-professionele versie en in het tweede geval met de professional versie van XNA 2.0. De belangrijkste vernieuwingen die XNA 2.0 met zich meebracht zijn : mogelijkheid om met Visual Studio 2005 te werken in plaats van enkel Visual C# 2005 Express Edition Cross-Platform Game Project Converter : zet je spellen op een eenvoudige wijze om van Windows versie naar Xbox 360 versie en omgekeerd. De Xbox 360 versie ondersteund sommige PC zaken niet zoals keyboard en muis. Deze moeten handmatig aangepast worden. H2 : Geschiedenis 9

netwerkmogelijkheden : niet alleen per platform, ook cross-platform mogelijk, namelijk tussen Windows en Xbox 360. Bij het ontwikkelen voor Xbox 360 heb je wel een Xbox LIVE lidmaatschap en een Creators Club lidmaatschap nodig. verschillende gamepad types : de gamepad types zijn aangevuld. Het is mogelijk om input te verwerken van andere type controllers. Wat de toekomst voor XNA zal brengen : XNA 3.0 Zune functionaliteit : je zal de mogelijkheid krijgen om games te maken voor de Zune. Dit kunnen enkel 2D games zijn. Twee minpunten echter : het scherm is redelijk klein en de Zune is nog niet verkrijgbaar in Europa. Visual Studio 2008 : enkel Visual Studio 2008 en Visual C# 2008 Express Edition zullen ondersteund zijn. Jammer voor de mensen die Visual Studio 2005 hebben zij moeten dan met de beperkte Visual C# 2008 Express edition werken. Xbox LIVE Community Games Je zal de mogelijkheid krijgen om je games voor de Xbox 360 online te plaatsen. Natuurlijk heb je wel een XNA Creators Club inschrijving nodig. Niet elke game zal echter online beschikbaar komen. De games worden eerst goed onderzocht door mensen die ingeschreven zijn bij de XNA Creators club. Dit wordt gedaan om er zeker van te zijn dat het game degelijk opgebouwd is en dat er geen destructieve code aanwezig is die schade aan de Xbox 360 zou toebrengen. Hun mening zal bepalen of het game geslaagd is om online te worden geplaatst en indien dit het geval is, zal het in de Xbox LIVE Marketplace beschikbaar worden voor iedereen over de hele wereld. H2 : Geschiedenis 10

Hoofdstuk 3 : XNA basic file Tijd om eens een kijkje in XNA Game Studio te nemen en de eerste game te schrijven. Ga naar Start > Programma s > Microsoft XNA Game Studio 2.0 (standaard installatie locatie) en open in deze map XNA Game Studio. XNA Game Studio staat echter niet in deze map, althans, zo lijkt het op het eerste zicht. Herinner je je dat in Hoofdstuk 1 vermeld werd dat XNA eigenlijk een plug-in is voor Visual Studio? Wel, dan zal je wel snappen dat je hier Microsoft Visual Studio 2005 (of Microsoft Visual C# 2005 Express Edition bij gebrek aan het vorige) moet openen. Nu krijg je de startpagina van Visual Studio voorgeschoteld, indien deze niet uitgeschakeld is. Voor mensen die reeds met Visual Studio gewerkt hebben zal je merken dat je eigenlijk geen verschil ziet met de gewone Visual Studio. Wat een tegenvaller, niet? En op zich is het ook niks anders dan de doodgewone Visual Studio. Maar door de installatie van XNA heb je nu wel een aantal nieuwe opties gekregen. Ga naar File > New > Project. Ervaren Visual Studio gebruikers zullen merken dat er nu een nieuwe node beschikbaar is onder Visual C#, namelijk XNA Game Studio 2.0. Klik hierop om de mogelijkheden te zien. Om te starten selecteer je hier Windows Game (2.0). Geef dan de naam MijnEerste XNAGame in en kies de locatie waar je de game wil opslaan. Als je Create directory for solution aanvinkt zal de solution file opgeslagen worden ter hoogte van de map die alle gegevens van het spel bevat. Vink je dit af, dan komt de solution file in het toplevel van je spel terecht. Het is aan te raden om Create directory for solution aan te vinken, kwestie van wat meer structuur te hebben. Als je nieuwe game nu geopend is, kijk eerst eens naar de Solution Explorer (zie Figuur 3.1). Hier zie je de structuur van je game. Properties en references zijn voor advanced users en zullen hier niet besproken worden. De inhoud per Visual Studio project kan verschillen, maar de betekenissen zijn gelijk voor alle Visual Studio projecten. De eerste map die je ziet staan is Content. Deze map zal gebruikt worden om alle content van je game in te bewaren. In deze map zit ook reeds een map references, die hier dus niet besproken zal worden. Het is aangeraden om in de Figuur 3.1 - Solution Explorer toekomst per type content een map aan te maken. Je hoeft dit natuurlijk niet te doen, maar dan wordt het al vlug een onoverzichtelijk zootje. Het volgende belangrijke item is Game.ico. Dit is standaard een afbeelding van een Xbox 360 controller. Het heeft tot doel om later als icoon voor de.exe file gebruikt te worden en zal ook linksboven in je window verschijnen. Als je dit wil vervangen door een eigen gemaakt icoon, benoem je jouw eigen icoon Game.ico. Laat deze de standaard Game.ico overschrijven en klaar is kees, jouw icoon zal nu gebruikt worden in plaats van het standaard icoon. H3 : XNA Basic File 11

Laten we eerst overgaan naar GameThumbnail.png. Deze afbeelding wordt gebruikt op de Xbox 360 om jouw spel te vertegenwoordigen in het menu. Om jouw eigen afbeelding te gebruiken doe je juist hetzelfde als bij Game.ico. Game1.cs en Program.cs zijn beide Visual C# bronbestanden. Ze bevatten de code die de game opbouwt en uitvoert. using System; namespace MijnEersteXNAGame static class Program /// <summary> /// The main entry point for /// the application. /// </summary> static void Main(string[] args) using (Game1 game = new Game1()) game.run(); Code 3.1 - Program.cs Laten we eerst een kijkje nemen in Program. cs (zie Code 3.1). Het bovenste stukje code using System; dient om de compiler te tonen waar hij klassen kan vinden die in dit programma gebruikt worden. In dit geval kan hij deze vinden in de System namespace. Een namespace is verzameling van klassen. Namespace MijnEersteXNAGame is dus de verzamelnaam voor alle klassen die je zal gebruiken voor je game. XNA maakt deze automatisch voor jou aan wanneer je een nieuw project start en plaatst de namespace bij elke nieuwe klasse die je aanmaakt. De klasse Program is statisch, wat wil zeggen dat ze geen instantie nodig heeft om te kunnen werken. Ze bevat 1 methode, namelijk Main. Deze is ook statisch, wat logisch is aangezien je een statische klasse hebt en je dus geen instantie kunt gebruiken om de methode Main uit te voeren. Deze methode is de standaard methode die het startpunt vormt van je programma. Dus als je het programma opstart, zal Main uitgevoerd worden. De code van deze methode maakt hier jouw game aan en start het op. Het aanmaken van de game maakt gebruik van een using statement. Dit zorgt ervoor dat het object dat je aangemaakt hebt (hier game van het type Game1) zeker opgeruimd wordt na het beëindigen van de methode en zelfs als er zich een exception (een fout) zou voordoen. Als dit niet het geval zou zijn, is er kans dat game nog blijft bestaan, maar niet meer volledig functioneel is. Game1 game = new Game1() maakt een nieuwe instantie aan van de klasse Game1 en game.run(); start het spel op. Normaalgezien is het niet nodig om in dit bestand wijzigingen aan te brengen. Verwijder het ook zeker niet, want anders zal je spel niet werken omdat het niet eens opgestart kan worden. Game1.cs is uiteindelijk de code voor jouw game. Program.cs zorgt er enkel voor dat jouw game opgestart kan worden, Game1.cs IS jouw game. In theorie kan je alle code in dit ene bestand plaatsen, maar praktisch gezien zal je de code verspreiden over verschillenden klassen. Om de code hier makkelijk te kunnen bespreken, zal het bestand in stukjes weergegeven worden. Zie blijage B. Basic File Game1.cs voor de volledige code. Zoals je ziet bevat Game1.cs veel meer using directives dan Program.cs. Je moet immers verwijzen naar alle XNA namespaces om gebruik te kunnen maken van de XNA klassen. Game1 behoort zelf tot de MijnEersteXNAGame klasse, waar Program ook toe behoort. Een handige tip : aangezien het menselijk oog het gevoeligst is voor groene kleuren, springen deze het meest in het zicht. Dit kan storen en ervoor zorgen dat je code onoverzichtelijk wordt. H3 : XNA Basic File 12

Om dit storende effect weg te nemen, kun je de summaries inklappen door op het kruisje voor de regel te klikken of kan je de kleur van de commentaar veranderen. Dit doe je via Tools > Options > Fonts and Colors. Selecteer in Show settings for : Text Editor. Ga in Display Items : naar XML Doc Comment en dan kan ja via Item foreground en Item background zelf de kleur aanpassen. Summaries zullen hier niet uitgelegd worden, ze spreken voor zich. public class Game1 : Microsoft.Xna.Framework.Game GraphicsDeviceManager graphics; SpriteBatch spritebatch;... Code 3.2 - Klasse Game De klasse hier is Game1, die erft van de klasse Game. Deze bevat basisfuncties en variabelen. Ze is opgesteld om het ons makkelijk te maken zodat we basiszaken niet meer zelf hoeven te programmeren. De klasse bevat 2 instantievariabelen (variabelen eigen aan een klasse), namelijk de GraphicsDeviceManager graphics en de SpriteBatch spritebatch. Graphics is een variabele die de instellingen van de grafische kaart bevat en diens beheer doet specifiek voor deze game. De grafische kaart is een zeer belangrijk element voor games. Deze heeft er immers voor gezorgd dat de games er steeds realistischer uitzien / zullen uitzien. Vandaar dat deze variabele in het standaardbestand voorkomt. De volgende variabele is spritebatch. Deze heeft ook een grafisch doel. Ze dient om een aantal 2D objecten, in de gamewereld sprites genoemd, te tekenen op het scherm. De sprites die tot één SpriteBatch behoren worden allemaal volgens dezelfde instellingen getekend. Meer over SpriteBatch in hoofdstuk 5. public Game1() graphics = new GraphicsDeviceManager(this); Content.RootDirectory = Content ; Code 3.3 - Constructor van de klasse Game Na de variabelen vind je de constructor Game1 die het mogelijk maakt dat je een instantie van je game kunt maken en je game kunt laten draaien. Hier gebeuren twee zaken. Ten eerste wordt graphics geïnitialiseerd. Om een nieuwe GraphicsDeviceManager te maken moet je een game als parameter meegeven. Aangezien deze GraphicsDeviceManager tot deze game behoort, maak je gebruik van het keyword this. Dit verwijst naar de Game1 klasse zelf, die door overerving een Game met aanvullingen is en dus kan gebruikt worden als parameter. Content is een variabele die zich standaard in de klasse Game bevindt. Hij is van het type ContentManager, een klasse die dus instaat voor het beheren van alle content. Via Content. Rootdirectory stel je de locatie in waar de ContentManager de content terug kan vinden. Hier dus de map Content. Je hoeft enkel Content in te vullen omdat XNA sowieso paden zal bepalen vanaf de root. De root is je WindowsGame, of anders gezegd, het niveau waarin je Game1.cs en Program. cs terugvindt. Sinds XNA 2.0 krijg je de map Content standaard als je een nieuwe game maakt. Vóór XNA 2.0 moest je zelf deze map aanmaken. Game1 bevat 5 methodes die elk instaan voor een aspect tijdens het lopen van de game. Zie Figuur 3.2 voor een overzicht van de methodes in functie van de duur van het spel. H3 : XNA Basic File 13

Start game LoadContent() Start gameloop gameloop Update(...) Draw(...) Stop game Stop gameloop Sluit game Initialize() UnloadContent() Figuur 3.2 - Wanneer wordt welke methode uitgevoerd? protected override void Initialize() base.initialize(); Code 3.4 - Initialize() Als eerste hebben we Initialize(). Deze functie wordt uitgevoerd vooraleer alle andere onderstaande functies uitgevoerd worden. Deze functie wordt uitgevoerd vooraleer de game zichtbaar wordt. Hier kun je alle gegevens initializeren die niet grafisch zijn, bijvoorbeeld een variabele die het aantal vijanden aanduidt de waarde 5 geven. Ook worden hier de nodige game services geladen. Game services zijn een mechanisme om koppelingen tussen objecten te behouden die met elkaar moeten communiceren. In Initialize() staat al een stuk code die zegt dat hij na het uitvoeren van bovenstaande code de methode Initialize() van de klasse Game moet uitvoeren. base slaat op de klasse waarvan een andere klasse erft en is in dit geval dus Game. protected override void LoadContent() spritebatch = new SpriteBatch (GraphicsDevice); Code 3.5 - Loadcontent() De volgende functie is LoadContent(). Hier wordt alle grafische content geladen. Daarom wordt de SpriteBatch spritebatch hier geladen. Om een nieuwe SpriteBatch te initializeren moet je aan de constructor als parameter de grafische kaart meegeven. De verwijzing hiernaar bevindt zich in de variabele GraphicsDevice van de klasse Game. Opmerking : in de commentaar onder de initialisatie van spritebatch wordt vermeld dat je om te verwijzen naar content gebruik kun maken van this. Content, maar Content alleen werkt even goed. protected override void UnloadContent() Code 3.6 - Unloadcontent() De derde methode UnloadContent() wordt enkel gebruikt als je zaken geladen hebt zonder de hulp van de ContentManager Content. Zaken geladen met Content worden door Content zelf ontladen in geval van afsluiten van je game. protected override void Update(GameTime gametime) if (GamePad.GetState(PlayerIndex. One).Buttons.Back == ButtonState.Pressed Keyboard.GetState().IsKeyDown(Keys.Escape)) this.exit(); base.update(gametime); Code 3.7 - Update(GameTime gametime) Als voorlaatste hebben we Update(GameTime gametime). Update wordt gebruikt om alles te controleren en te verwerken wat niet grafisch is. Dit kan game logica zijn, controleren op input, afspelen van audio of een combinatie van alles te samen. Update heeft een parameter gametime nodig. Deze parameter wordt via de overgeërfde methode Run()van Game ingevuld. H3 : XNA Basic File 14