XNA-peliohjelmointiympäristö



Samankaltaiset tiedostot
Selainpelien pelimoottorit

arvostelija OSDA ja UDDI palveluhakemistoina.

.NET ajoympäristö. Juha Järvensivu 2007

Windows 8.1:n vaiheittainen päivitysopas

Android ohjelmointi. Mobiiliohjelmointi 2-3T5245

Concurrency - Rinnakkaisuus. Group: 9 Joni Laine Juho Vähätalo

Järjestelmäarkkitehtuuri (TK081702)

Uutta Remote Support Platform 3.0 -versiossa

Ylläpitodokumentti. Boa Open Access. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

CUDA. Moniydinohjelmointi Mikko Honkonen

BlueJ ohjelman pitäisi löytyä Development valikon alta mikroluokkien koneista. Muissa koneissa BlueJ voi löytyä esim. omana ikonina työpöydältä

Dart. Ryhmä 38. Ville Tahvanainen. Juha Häkli

Maiju Mykkänen Susanna Sällinen

ELM GROUP 04. Teemu Laakso Henrik Talarmo

EMVHost Online SUBJECT: EMVHOST ONLINE CLIENT - AUTOMAATTISIIRROT COMPANY: EMVHost Online Client sovelluksen käyttöohje AUTHOR: DATE:

DumpDbox-ohjelmiston asennus- ja käyttöohjeet Sisällys

Tämän lisäksi listataan ranskalaisin viivoin järjestelmän tarjoama toiminnallisuus:

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

AS C-ohjelmoinnin peruskurssi 2013: C-kieli käytännössä ja erot Pythoniin

Valppaan asennus- ja käyttöohje

SEPA REFAKTOROINTI Antti Ahvenlampi, 57408L Erik Hakala, 57509T

11/20: Konepelti auki

Maastotietokannan torrent-jakelun shapefile-tiedostojen purkaminen zip-arkistoista Windows-komentojonoilla

Visma Liikkuvan työn ratkaisut

Työn laji Arbetets art Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages

F-Secure KEY salasanojenhallintaohjelman käyttöönotto PC -laitteella

Amazon Web Services (AWS) on varmaankin maailman suosituin IaaS-tarjoaja. Lisäksi se tarjoaa erilaisia PaaS-kategoriaan kuuluvia palveluita.

Visma Liikkuvan työn ratkaisut Päivitysohje. Pääkäyttäjän opas

Aika/Datum Month and year Kesäkuu 2012

Koht dialogia? Organisaation toimintaympäristön teemojen hallinta dynaamisessa julkisuudessa tarkastelussa toiminta sosiaalisessa mediassa

Pedacode Pikaopas. Java-kehitysympäristön pystyttäminen

sivu 1 Verkkopäätteen muuttaminen Anvian uuteen tekniikkaan Ohje käy seuraaviin verkkopäätteisiin

Ohjelmistopäivitysohje

XNA grafiikka laajennus opas. Paavo Räisänen. Tämän oppaan lähdekoodit ovat ladattavissa näiden sivujen Ladattavat osiossa.

Luku 7 Uusien Mallien Tiedostot

C++ Ohjelmoijan käsikirja. Johdanto

Nimettömien tietojen lähettäminen Lenovolle

Webforum. Version 14.4 uudet ominaisuudet. Viimeisin päivitys:

CODEONLINE. Monni Oo- ja Java-harjoituksia. Version 1.0

Kahoot! Kirjautuminen palveluun. Sinikka Leivonen

Action Request System

Näin saat 365 päivän ajalta Freshest Data sisältöä NavionicsWeb Store nettikaupasta

! #! %! & #!!!!! ()) +

Maailman muutosta tallentamassa Marko Vuokolan The Seventh Wave -valokuvasarja avauksena taidevalokuvan aikaan

15. Ohjelmoinnin tekniikkaa 15.1

erasmartcardkortinlukijaohjelmiston

ETAPPI ry JOOMLA 2.5 Mediapaja. Artikkeleiden hallinta ja julkaisu

erasmartcard-kortinlukijaohjelmiston asennusohje (mpollux jää toiseksi kortinlukijaohjelmistoksi)

Ohjelmointi 1 / syksy /20: IDE

Purot.net Wiki. Tutkielma. Paavo Räisänen. Centria Ammattikorkeakoulu

Visual Basic -sovelluskehitin Juha Vitikka

Ohjelmistojen mallintaminen, mallintaminen ja UML

Osoitin ja viittaus C++:ssa

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Kehitysohje. ETL-työkalu. ExtraTerrestriaLs / Aureolis Oy

Lumon tuotekirjaston asennusohje. Asennus- ja rekisteröintiohje

Alkuun HTML5 peliohjelmoinnissa

ELOKUVATYÖKALUN KÄYTTÖ ANIMAATION LEIKKAAMISESSA. Kun aloitetaan uusi projekti, on se ensimmäisenä syytä tallentaa.

Kontrollilaitteet. Arsenaali

Matopeli C#:lla. Aram Abdulla Hassan. Ammattiopisto Tavastia. Opinnäytetyö

Brother ScanViewerin opas ios- / OS X -järjestelmille

Kuva 1. Jokaisen tavallisen kuvan tasotyökalussa näkyy vain yksi taso, tässä nimellä tausta.

Nero 7:n Windows Vista TM -tuki

Linux rakenne. Linux-järjestelmä koostuu useasta erillisestä osasta. Eräs jaottelu: Ydin Komentotulkki X-ikkunointijärjestelmä Sovellusohjelmat

ANVIA ONLINE BACKUP ASENNUSOPAS 1(7) ANVIA ONLINE BACKUP ASENNUSOPAS 1.0

Ohjeet e kirjan ostajalle

Taulukot. Jukka Harju, Jukka Juslin

Valintanauhan komennot Valintanauhan kussakin välilehdessä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

S11-09 Control System for an. Autonomous Household Robot Platform

Valintanauhan komennot Valintanauhan välilehdissä on ryhmiä ja kussakin ryhmässä on toisiinsa liittyviä komentoja.

Järjestelmäarkkitehtuuri (TK081702) Järjestelmäarkkitehtuuri. Järjestelmäarkkitehtuuri

Office ohjelmiston asennusohje

Comet pysäköintimittarin asennus ja kytkeminen tietokoneeseesi (Windows XP) USB-kaapelilla.

Solteq Tekso v.4.0. Versiopäivitysohje.

Jypelin käyttöohjeet» Miten voin liittää törmäyksiin tapahtumia?

Jypelin käyttöohjeet» Ruutukentän luominen

Tikon kassamaksujen käsittely

Ohje: Tiedostot turvaan ja puhdas Ubuntu alle

Ohjelmoinnin perusteet Y Python

Testausdokumentti. Kivireki. Helsinki Ohjelmistotuotantoprojekti HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Käytin tehtävän tekemiseen Xubuntu käyttöjärjestelmää aikaisemmin tekemältäni LiveUSB-tikulta.

Home Media Server. Home Media Server -sovelluksen asentaminen tietokoneeseen. Mediatiedostojen hallinta. Home Media Server

Ohjelmointi 1. Kumppanit

Sähköposti ja uutisryhmät

Valintanauhan komentojen selaaminen Jokaisessa valintanauhassa on ryhmiä ja jokaisessa ryhmässä on joukko siihen liittyviä komentoja.

Tekso. 3.0 version päivitysohje

Ohjelmoinnin perusteet Y Python

MultiBoot. Käyttöopas

Visma Econet -ohjelmat ActiveX on epävakaa -virheilmoituksen korjausohjeet

Ohjelmoinnin jatkokurssi, kurssikoe

Tikon Ostolaskujenkäsittely/Web-myyntilaskutus versio 6.4.0

9. Periytyminen Javassa 9.1

Päivitysohje Opus Dental

Sonera Yrityssähköposti. Outlook 2013 lataus ja asennus

ClassPad fx-cp400 päivitys. + Manager for ClassPad II Subscription päivitys

GIS-automatisointi ja ohjelmointi/skriptaus. Harri Antikainen

UML Luokkakaavio 14:41

TIE PRINCIPLES OF PROGRAMMING LANGUAGES Eiffel-ohjelmointikieli

TIE Principles of Programming Languages CEYLON

Järjestelmäarkkitehtuuri (TK081702) Web Services. Web Services

Transkriptio:

XNA-peliohjelmointiympäristö Timo Maaranen Helsinki 6.3.2008 HELSINGIN YLIOPISTO Tietojenkäsittelytieteen laitos

Tekijä Författare - Author Timo Maaranen Työn nimi Arbetets titel - Title XNA-peliohjelmointiympäristö Oppiaine Läroämne Subject Tietojenkäsittelytiede Työn laji Arbetets art - Level Aika Datum Month and year Sivumäärä Sidoantal Number of pages Seminaarityö 2.3.2008 18 sivua Tiivistelmä Referat - Abstract Tämä kirjoitus esittelee XNA-peliohjelmointiympäristön pääpiirteet yleisellä tasolla. ACM Computing Classification System (CCS): A.1 [Introductory and Survey], K.8.0 [General] Avainsanat Nyckelord - Keywords XNA, peliohjelmointiympäristöt, ohjelmistotuotanto Säilytyspaikka Förfaringsställe Where dopisited Muita tietoja Övriga uppgifter Additional information

ii Sisältö 1 Johdanto 1 2.NET-ohjelmistokehys 2 3 XNA-ohjelmistokehys 3 3.1 XNA-ohjelmistokehyksen palvelut ja luokkakirjastot...4 3.2 XNA-ohjelmistokehyksen arkkitehtuuri...6 3.3 Pelisilmukka ja peliohjelman elinkaari...6 3.4 Animaatio ja ajoitus...7 3.5 Pelikomponentit...8 3.6 Pelipalvelut...8 3.7 Sisällön piirto...9 4 XNA Game Studio 2.0 -kehitysympäristö 10 4.1 Työkalut...11 4.2 XACT-työkalu...12 4.3 Peliohjelman ajaminen Xbox 360 -pelilaitteella...12 4.4 XNA Framework Remote Performance Monitor for Xbox 360 -työkalu...13 4.5 Sisältöputki...14 4.6 Sisältöputken komponentit...16 5 XNA Creators Club Online -yhteisö 17 Lähteet 18

1 1 Johdanto Pelien tuotanto on kasvava viihdeteollisuuden ala. Pelit monimutkaistuvat ja niiden tuotantoon kokonaisuudessaan käytetään yhä enemmän henkilötyötunteja. Suurten projektien lisäksi pienten ja suhteellisten yksinkertaisten pelien tuotantomäärät ovat kasvussa. Näitä tuotetaan niin ammattimaisesti kuin myös harrastelijamaisesti. Yhä useamman unelmana on tehdä pelejä, mutta mukaan pääseminen ei välttämättä ole kovin helppoa. Työkalut ja kehitysympäristöt eivät välttämättä ole halpoja, ja niiden käytön oppiminen on vaikeaa ja työlästä. Pelien ohjelmointiin on aina kuulunut se periaate, että peliä ajavasta alustasta on pyritty ottamaan kaikki hyöty irti, vähän pelin suunnittelusta riippuen. Pelialustojen nopea kehitys on osittain vähentänyt tätä tarvetta, sillä monet pelit voidaan toteuttaa käyttämättä aivan kaikkea alustan laskentatehoa. Ohjelmakoodin optimoinnin sijaan aikaa kannattaisi monesti käyttää itse pelin suunnitteluun, mikä on monessa tapauksessa loppukäyttäjälle, eli pelaajalle, huomattavasti tärkeämpää kuin pelin sisäisen toteutuksen yksityiskohdat. Pelin mekaniikka, käyttöliittymän toimivuus sekä pelaajan yleinen tuntuma pelistä määrittelee pitkälti sen, kuinka hyvänä pelinä peli koetaan. Edellä mainitut syyt ovat osaltaan vaikuttaneet siihen, että erilaiset laitteistoriippumattomat, ajonaikaisissa ympäristöissä toimivia virtuaalikoneita hyödyntävät ja muistinhallintaa automatisoivat ohjelmointikielet ovat yleistyneet myös peliohjelmoinnissa. Niiden avulla erityisesti yksikertaisempien pelien ohjelmointitaakkaa on voitu helpottaa. Samalla peliohjelmistoihin jäävien virheiden määrää on saatu pienemmäksi, koska esimerkiksi yleiset muistivuodot eivät ole yhtä tavallisia muistinhallintaa automatisoivissa kielissä. Toisaalta virtuaalikone mahdollistaa peliohjelmiston helpomman siirrettävyyden muille alustoille, mikä potentiaalisesti laajentaa asiakaskuntaa huomattavasti.

2 Eräs näitä periaatteita hyödyntävä pelinkehitysympäristö on Microsoftin kehittämän.netohjelmistokehyksen (.NET Framework) päälle rakennettu XNA-ohjelmistokehys (XNA Framework) [Mic08a]. Yhdessä XNA Game Studio -kehitystyökalujen kanssa XNAohjelmistokehys muodostaa XNA-pelinkehitysympäristön, joka tarjoaa mahdollisuuden kehittää pelejä Windows ja Xbox 360 -pelialustoille pienellä tai olemattomalla taloudellisella panostuksella ja suhteellisen vähäisellä opettelulla. 2.NET-ohjelmistokehys.NET-ohjelmistokehyksen dokumentaatiosta [Mic08b] selviää, että.net-ohjelmistokehys on tarkoitettu helpottamaan sovellusten kehitystä erityisesti Windows-alustalle, mutta se on käytössä myös monissa pienemmän mittakaavan laitteissa, kuten matkapuhelimissa..netohjelmistokehys koostuu laajasta luokkakirjastosta ja ajoympäristöstä (Common Language Runtime, CLR). CLR-ajoympäristö suorittaa sovellukset virtuaalikoneessa, joka kääntää ajonaikana esikäännettyä ohjelmakoodia (Microsoft Intermediate Language, MSIL) alustalle sopivaksi binäärikoodiksi. Sovellus voidaan kirjoittaa monilla eri ohjelmointikielellä, mutta suosituin lienee C# (C-sharp), mitä käytetään myös pääasiassa XNApeliohjelmointiympäristössä. Kuvassa 2.1 havainnollistetaan.net -ohjelmistokehyksen toimintaa..net-ohjelmistokehyksestä on olemassa useita eri versioita. Xbox 360 -pelikonsolissa on.net Compact Framework 2.0 -ohjelmistokehys, mikä on normaalin.net Framework 2.0 -ohjelmistokehyksen supistettu versio. Tämä täytyy ottaa huomioon, kun peliohjelmistoa kehitetään XNA Game Studio -kehitysympäristössä, sillä kaikki.net-ohjelmistokehyksen tarjoamat palvelut eivät ole käytössä supistetussa versiossa.

Kuva 2.1: Kuvassa havainnollistetaan sovelluksessa käytetyn ohjelmointikielen käsittelyn etenemistä varsinaiseksi alustan konekieleksi. [Wik08] 3

4 3 XNA-ohjelmistokehys Tässä luvussa ja sen aliluvuissa esitetyt tiedot perustuvat XNA-ohjelmistokehyksen dokumentaation [Mic08a]. XNA-ohjelmistokehys perustuu.net-ohjelmistokehykseen laajentaen sitä erityisesti peliohjelmistoissa yleisesti käytettävillä luokilla ja palveluilla. XNA-ohjelmistokehys sisältää kokoelman luokkia, joita käyttämällä voidaan vähentää peleissä usein käytettyjen komponenttien uudelleen kirjoittamisen tarvetta. Lisäksi luokat piilottavat laitteistokohtaiset yksityiskohdat ja eroavaisuudet muutamaa poikkeusta lukuun ottamatta. Tämä helpottaa ohjelmointityötä ja erityisesti ohjelmakoodin yhteensopivuutta eri alustoilla. Xbox 360 -alustalla XNA -ohjelmistokehyksen perustana on.net Compact Framework 2.0 ja Windows-alustalle perustana on.net Framework 2.0. Vaikka yleensä peliohjelmistoissa käytettynä näiden ohjelmistokehysten erot eivät juuri tule esille, se tulee silti huomioida erityisesti, jos haluaa yhteensopivuuden säilyvän alustalta toiselle. 3.1 XNA-ohjelmistokehyksen palvelut ja luokkakirjastot XNA-ohjelmistokehys luo sitä käyttävälle pelille ympäristön, jossa on monia hyödyllisiä palveluita ja luokkakirjastoja. Tärkein palvelu on pelisilmukka, joka automatisoi pelilogiikan päivityksen ja piirtorutiinien kutsumisen. Muita hyödyllisiä palveluita on esimerkiksi pelikomponentit (game components) ja pelipalvelut (game services). Luokkakirjastot sisältävät myös runsaasti ohjelmointityötä yksinkertaistavia työkaluja, kuten matemaattisia operaatioita, pelin sisällön käsittelyä ja pelaajan vuorovaikutuksen hallintaa yksinkertaistavia luokkia. Sisällön piirtoon liittyvät luokat ovat kattavat ja joustavat. Taulukossa 1 on listattu XNA-ohjelmistokehyksen luokkakirjastojen nimiavaruudet ja niiden sisältämien luokkien pääasialliset toiminnot.

Nimi Microsoft.XNA.Framework Microsoft.XNA.Framework.Audio Selitys Sisältää usein käytetyt luokat kuten ajastimet ja pelisilmukat. Sisältää matalan tason ohjelmointirajapinnan metodit, joilla avataan ja käsitellään XACTtyökalulla tuotettuja äänitiedostoja. Microsoft.XNA.Framework.Content Sisältää ajonaikaiset sisältöputken Microsoft.XNA.Framework.Design Microsoft.XNA.Framework.GameServices Microsoft.XNA.Framework.Graphics Microsoft.XNA.Framework.Graphics.Packe dvector Microsoft.XNA.Framework.Input Microsoft.XNA.Framework.Net Microsoft.XNA.Framework.Storage komponentit. Tarjoaa yhdenmukaistetun tavan muuttaa oliotyyppejä toisiksi oliotyypeiksi. Sisältää luokkia, jotka toteuttavat erilaisia pelaajiin liittyviä palveluita. Nämä palvelut keskustelevat joko suoraan pelaajan kanssa, pelaajan tietojen kanssa, tai muutoin kuvastavat pelaajan tekemiä valintoja. Sisältää matalan tason ohjelmointirajapinnan, joka mahdollistaa alustan grafiikkaprosessorien ohjelmoimisen. Sisältää luokkia, joilla voidaan muuttaa tietotyyppejä kompaktiin binäärimuotoon ja kompaktista muodosta takaisin laajennettuun muotoon. Sisältää luokat, jotka saavat syötteet näppäimistöltä, hiireltä ja Xbox 360 -peliohjaimelta. Sisältää luokat, jotka toteuttavat tuen monenlaisille verkko-ominaisuuksille, kuten Xbox LIVE ja moninpeli. Sisältää luokkia, joiden avulla tietotyyppejä voidaan muuttaa bittivirroiksi ja takaisin, sekä kirjoittaa ja lukea bittivirtoja massamuisteilta. Taulu 3.1: Taulukossa on listattu XNA-ohjelmistokehyksen luokkakirjaston nimiavaruudet ja näiden sisältämien luokkien tehtävät ja tarjoamat palvelut pääpiirtein. [Mic08a] 5

6 3.2 XNA-ohjelmistokehyksen arkkitehtuuri XNA-ohjelmistokehyksen käyttö perustuu malliin, jossa XNA-ohjelmistokehys yksinään muodostaa ajettavan peliohjelman rungon. Tämä runko ei sinänsä ole mielenkiintoinen peliohjelma, sillä se ei tee mitään ulospäin näkyvää. Varsinainen peli tuleekin rakentaa tämän rungon päälle laajentaen sen toiminnallisuutta. Tämä tapahtuu siten, että pelin pääluokka perii Microsoft.XNA.Framework.Game -luokan. XNA-ohjelmistokehys tarjoaa Game-luokan kautta käytössä olevan pelisilmukan, joka kutsuu automaattisesti Game-luokan Initialize-, Update- ja Draw-metodeja. Peliohjelman tulee korvata (override) nämä metodit ja suorittaa kaikki pelin toiminnallisuus näistä käsin. Update-metodi on vastuussa pelilogiikan päivityksestä. Draw-metodi on vastuussa pelin sisällön piirtämisestä. Initialize-metodin vastuulla on suorittaa tarpeelliset alustukset ennen ensimmäistä Update- ja Draw-metodien kutsua. 3.3 Pelisilmukka ja peliohjelman elinkaari Peliohjelman käynnistyy, kun kutsutaan luokan Game metodia Run. XNA-ohjelmistokehys hoitaa tämän kutsun. Kutsu käynnistää pelisilmukan, joka ensimmäisenä kutsuu pelin pääluokan Initialize-metodia. Tämän jälkeen kutsutaan Update-metodia ja viimeisenä Drawmetodia. Peliohjelman suoritus lakkaa, kun luokan Game metodia Exit kutsutaan.

7 XNA-ohjelmistokehys tarjoaa kaksi eri tapaa, jolla pelisilmukka kutsuu peliohjelman päivitys- ja piirtorutiineja. Oletuksena pelisilmukka kutsuu Update- ja Draw-metodia tietyin aikavälein, joka on säädettävissä. Oletuksena aikaväli on 1/60 sekuntia, ja ajan voi säätää muuttamalla luokan Game kentän TargetElapsedTime arvoa. Kun viimeisimmästä Updatemetodin kutsusta on kulunut asetettu aika, XNA-ohjelmistokehys kutsuu Update-metodia. Jos metodikutsun paluun jälkeen aikaa on vielä jäljellä seuraavaan Update-metodikutsuun, pelisilmukka kutsuu Draw-metodia. Jos tämän kutsun paluun jälkeen aikaa on vielä jäljellä, pelisilmukka nukkuu, kunnes on seuraavan Update-metodikutsun aika. Jos Updatemetodikutsu kestää pidemmän aikaa kuin kutsujen välinen aika, pelisilmukka asettaa luokan GameTime kentän IsRunningSlowly arvoksi TRUE ja kutsuu Update-metodia uudestaan niin useasti kuin kuluneessa ajassa on oletettavissa asetetulla aikavälillä. Tällaisissa tapauksissa peliohjelman tulee reagoida tilanteeseen esimerkiksi keventämällä Update-metodissa tehtäviä toimenpiteitä. Kun Update-kutsut on suoritettu ja aikaa on taas jäljellä seuraavaan kutsuun, Draw-metodia kutsutaan jälleen. Toinen tapa kutsua Update- ja Draw-metodeja on kutsua niitä sarjassa niin usein kuin mahdollista. Tämä tapahtuu asettamalla luokan Game kentän IsFixedTimeStep arvoksi FALSE. Tällöin kentän TargetElapsedTime ei ole merkitystä. 3.4 Animaatio ja ajoitus Pelisilmukan päivitystapa vaikuttaa oleellisesti siihen, kuinka peliohjelman tulisi huomioida kuluva aika. Jos käytössä on oletuksena oleva kiinnitetty pelisilmukan päivitys, peliohjelma voi olettaa, että Update-metodia kutsutaan aina sovituin ajanjaksoin. Kaikki peliohjelman suorittama animaatio ja ajoitus voidaan tällöin perustaa tähän oletukseen ja asetettua päivitysaikaa voidaan suoraan käyttää kuluneena aikana. Jos sen sijaan Update-metodia kutsutaan niin usein kuin mahdollista, aikavälit sen kutsujen välillä voi vaihdella suurestikin. Tällöin animaatio ja ajoitus tulee perustaa GameTime-luokan kenttään ElapsedGameTime. ElapsedGameTime sisältää kunkin Update-metodin kutsun yhteydessä ajan, joka on kulunut edellisestä Update-metodin kutsusta.

8 3.5 Pelikomponentit Pelikomponentit ovat pelin pääluokkaan rinnastettavia ohjelmakomponentteja, joilla on omat Intialize-, Update- ja Draw-metodit. Pelikomponentit tarjoavat modulaarisen tavan lisätä toiminnallisuutta peliohjelmaan. Niiden avulla peliohjelmiston arkkitehtuuria voidaan myös selkeyttää. Ideaalitapauksessa pelikomponentti hoitaa jonkin suurehkon kokonaisuuden päivittämisen. Tyypillisesti pelikomponentti hoitaa esimerkiksi pelin vihollisyksikköjen tekoälyn päivittämisen. Pelikomponentit eivät sovellu käytettäväksi runsaslukuisina pienten osa-alueiden hoitamiseen, sillä tämä voi hidastaa pelisilmukan kiertoaikaa, johtuen pelikomponenttien käsittelytavasta. Pelikomponentit voidaan jakaa kahteen luokkaan sen mukaan, suorittaako pelikomponentti sisällönpiirtoa vai ei. Pelikomponentit, jotka eivät suorita sisällön piirtoa, perivät luokan GameComponent ja korvaavat tämän luokan Initialize- ja Update-metodit. Sisällönpiirtoa suorittavat pelikomponentit perivät DrawableGameComponent luokan ja korvaavat sen Initialize-, Update-, ja Draw-metodit. Sisällönpiirtoa suorittaville pelikomponenteille voidaan määrätä piirtojärjestys DrawableGameComponent.DrawOrder-kentillä. Pelikomponentit rekisteröidään metodilla Game.Components.Add-metodilla. Tämän jälkeen pelisilmukka kutsuu rekisteröityjen pelikomponenttien Initialize-, Update-, ja Draw-metodeja automaattisesti pääluokan vastaavien metodien rinnalla. 3.6 Pelipalvelut Pelipalvelu on mekanismi, jolla olioiden välisiä vuorovaikutuksia voidaan hoitaa keskitetysti ilman tiukkoja olioiden välisiä sidoksia. Pelipalvelussa oleellisessa osassa on välittäjä, joka tässä tapauksessa on Game.Services-luokka. Välittäjälle rekisteröidään olioita, jotka toteuttavat tiettyjä palveluita. Tämän jälkeen ne oliot, jotka tarvitsevat näitä palveluita, voivat pyytää haluamaansa palvelua välittäjältä. Näin palvelun käyttäjällä ei tarvitse olla suoraa viittausta palvelua tarjoavaan olioon. Riittää, että palvelua tarvitseva tietää palvelun tyypin.

9 Palvelun tyyppi määritellään rajapinnan (interface) kautta. Palvelua tarjoava luokka toteuttaa tämän rajapinnan. Tästä luokasta luodaan instanssi ja syntynyt olio rekisteröidään Game.Services-luokkaan Services.AddService-metodilla antamalla parametreina viittaus palvelua tarjoavaan olioon sekä sen toteuttamaan rajapintaan. Kun jokin toinen luokka tarvitsee kyseisen rajapinnan toteuttavaa oliota, se pyytää sitä Game.Services-luokalta Services.GetService-metodilla, jolle se antaa syötteenä palvelun tunnisteena toimivan rajapinnan. Metodi palauttaa viittauksen palvelun toteuttavaan olioon ja palvelu on tämän jälkeen käytössä rajapinnan kautta. 3.7 Sisällön piirto Graphics-nimiavaruus tarjoaa kattavan luokkakirjaston ja rajapinnan pelin visuaalisen sisällön käsittelyyn ja piirtoon. Sen tarjoama piirtotapa perustuu perinteisiin kolmiulotteisiin rautalankamalleihin (mesh), pintakuvioihin ja valaistuksiin. Piirtoprosessi muistuttaa Microsoft DirectX-rajapintaa, mutta rajapinta on sitä yleisemmällä tasolla varjostinohjelmia lukuun ottamatta. Lähes kaikki piirto perustuu efekteihin, jotka määritellään Effect-luokan avulla. Effectluokkaan määritellään varjostinohjelmia, jotka suorittavat varsinaisen piirron. Piirron yhteydessä haluttu efekti kytketään päälle, ennen kuin rautalankamallin piirto suoritetaan, jolloin piirretty rautalankamalli piirretään päälle kytketyn efektin sisältämillä varjostinohjelmilla. Varjostinohjelman voidaan kirjoittaa joko matalan tason shader assembly language -kielellä (ASM) tai korkean tason high-level shader language -kielellä (HLSL). Windows-alustalla tuetut varjostinohjelmamallit ovat Shader Model 1.x, 2.x ja 3.0. Xbox 360 -alustalle tuetaan malleja 2.0 sekä laajennettua versiota mallista 3.0. Varjostinohjelmia kirjoittaessa kohdealustan ominaisuudet tulee ottaa huomioon, ja erityisesti Windows-alustalla on varauduttava siihen, että tuetut varjostinmallit voivat vaihdella käyttäjien laitteistojen välillä.

10 Varjostinohjelmat voidaan kirjoittaa esimerkiksi erilliseen tiedostoon, josta ne ladataan ja käännetään ennen piirtoa. Varjostinohjelmatiedosto voi sisältää useita erilaisia verteksivarjostimia ja pikselivarjostimia sekä tekniikoita (technique). Tekniikoihin määritellään, mitä varjostinohjelmia kyseisessä tekniikassa käytetään. Tekniikkamäärittely voi sisältää myös useita pyyhkäisyjä (pass). Pyyhkäisyjen avulla piirto voidaan jakaa osiin niin että sisältö, tai määritelty osa sisällöstä, piirretään useaan kertaan erilaisilla varjostinyksikkökombinaatioilla ennen kuin tulos piirretään ruutuun. Graphics-nimiavaruuden sisältämä SpriteBatch-luokka tarjoaa vaihtoehtoisen tavan piirtää sisältöä, erityisesti silloin kun kolmiulotteisuutta ei tarvita. SpriteBatch-luokan avulla kaksiulotteisia kuvia voidaan piirtää hyvin pienellä ohjelmointityöllä. Piirron yhteydessä kuvia voidaan myös esimerkiksi kiertää ja skaalata. SpriteBatch-luokalla voidaan piirtää myös perinteisen kolmiulotteisen piirron yhteydessä, joten se tarjoaa kätevän tavan piirtää pelin näkymään erikoistehosteita, kuten partikkeleita muodostettuja savu- ja tulitehosteita yms. 4 XNA Game Studio 2.0 -kehitysympäristö Tässä luvussa ja sen aliluvuissa esitetyt tiedot perustuvat XNA-ohjelmistokehyksen dokumentaation [Mic08a]. XNA Game Studio -kehitysympäristö on työkalukokoelma pelien kehittämiseen XNA Framework -ohjelmistokomponenttikirjastoa käyttäen Windows ja Xbox 360 -alustoille. XNA Game Studio perustuu Microsoft Visual Studio -työkaluihin, ja se on erityisesti suunnattu harrastajille ja opiskelijoille. Kehitysympäristön työkalut ovat ilmaisia ja ainoastaan Visual C# 2005 Express Edition -ohjelmistokehitysympäristö vaatii ilmaisen rekisteröitymisen. Pelien kehitys Windows-alustalle on täysin ilmaista, mutta Xbox 360 -alusta vaatii XNA Creators Club -jäsenyyden. XNA Creators Club -jäsenyys on maksullinen ja sen avulla peliohjelmia voi ajaa Xbox 360 -alustalla ja jakaa toisille XNA Creators Club -jäsenille. Microsoft DreamSpark -kampanjan myötä opiskelijoilla on mahdollisuus saada XNA Creators Club -jäsenyys vuodeksi ilmaiseksi [9St08].

11 XNA Game Studio -kehitysympäristössä voi kehittää kaupallisia pelejä Windows-alustalle, mutta toistaiseksi kaupallisten pelien kehitys Xbox 360 -alustalle ei onnistu. Tilanteeseen on kuitenkin ilmeisesti tulossa muutos lähiaikoina. 4.1 Työkalut XNA Game Studio 2.0 -kehitysympäristö sisältää XNA Framework -ohjelmistokomponenttikirjastoa käyttävän pelin kehittämisessä tarvittavat oleelliset työkalut. Työkalut asennetaan jonkin Visual Studio 2005 -ohjelmistokehitysympäristön version päälle, jolloin ne integroituvat osaksi tätä. Visual C# 2005 Express Edition -ohjelmistokehitysympäristö on ilmainen vaihtoehto kehitysympäristöksi, johon työkalut voi integroida. Osa työkaluista on huomaamattomasti integroitu valittuun kehitysympäristöön. Nämä ohjaavat peliohjelmistoprojektin hallintaa monella tavoin, kuten helpottavat kääntämistä ja peliohjelman ajamista sekä peliresurssien hallintaa. Selkeästi erillisiä työkaluja ovat mm. XNA Game Studio Device Center, jolla hallitaan yhteyksiä Xbox 360 -pelilaitteisiin, XACTtyökalu sekä XNA Framework Remote Performance Monitor for Xbox 360 -työkalu. Xbox 360 -pelilaitteelle on myös XNA Game Studio Connect -työkalu, jonka avulla peliohjelmia voi ajaa kyseisellä laitteella kehitysympäristöstä käsin yhdessä XNA Game Studio Device Center -työkalun kanssa.

12 4.2 XACT-työkalu XACT-työkalua (Cross Platform Audio Creation Tool) käytetään ääninäytteiden organisointiin sekä äänitehosteiden ja musiikin suunnitteluun. Sen tarkoitus on mm. helpottaa äänisuunnittelijan ja ohjelmoijan työnjakoa ja yhteistyötä. Sen avulla äänisuunnittelija voi koota ääninäytteitä aaltopankeiksi (wave bank) sekä määritellä ohjeita äänien soittamista varten äänipankkeihin (sound bank). Aaltopankki on tiedosto, joka sisältää useita eri äänitiedostoja. Äänipankki taas sisältää ohjeita äänitiedostojen soiton ajoituksesta ja taajuuksista, eli eräänlaisia nuottisekvenssejä. Äänisuunnittelija voi esimerkiksi koostaa äänipankkiin äänitehosteita, jotka kostuvat useammasta eri ääninäytteestä, ja määritellä niille variaatioita. XACT-työkalu tarjoaa äänisuunnittelijalle myös mahdollisuuden testata äänitehosteita ja musiikkia Xbox 360 -laitteistolla XACT Auditioning Utility -työkalun avulla, joka yhdistää XACT-työkalun Xbox 360 -laitteeseen. Tämä mahdollistaa äänitehosteiden ja musiikin toiston toimivuuden tarkastelun kohdealustassa. XACT-työkaluun kuuluu oleellisena osana myös ohjelmointirajapinta, jonka kautta aaltopankit ja äänipankit on helppo avata ja toistaa pelisovelluksessa. Koska variaatiot ovat määritelty etukäteen, ohjelmoijan työ helpottuu. Äänisuunnittelija on voinut tehdä muuttujamäärityksiä, joiden avulla ohjelmoija voi muuttaa dynaamisesti äänien toistoon liittyviä parametreja peliohjelmasta käsin ajon aikana. 4.3 Peliohjelman ajaminen Xbox 360 -pelilaitteella Peliohjelman ajaminen Xbox 360 -pelilaitteella vaatii ilmaisen Silver Xbox Live -jäsenyyden, maksullisen XNA Creators Club -jäsenyyden ja kiintolevyllä varustetun Xbox 360 -pelilaitteen. Yhteys Xbox Live -verkkopalveluun täytyy olla myös auki koko prosessin ajan.

13 Xbox 360 -pelilaite kytketään lähiverkkoon XNA Game Studio -kehitysympäristön sisältävän tietokoneen kanssa ja niin että ne ovat samassa aliverkossa. Tämä jälkeen Xbox 360 -pelilaitteelle asennetaan ilmainen XNA Game Studio Connect -ohjelma Xbox Live Marketplace -kauppapaikasta ja ohjelma käynnistetään. XNA Game Studio Connect asetetaan vastaanottavaan tilaan ja ohjelman tulostama avainkoodi kopioidaan. Tämän jälkeen kehitysympäristöstä käynnistetään XNA Game Studio Device Center -työkalu, johon avainkoodi syötetään. Nyt yhteys on valmis ja peliohjelma voidaan lähettää kehitysympäristöstä ajettavaksi Xbox 360 -pelilaitteelle. 4.4 XNA Framework Remote Performance Monitor for Xbox 360 -työkalu XNA Framework Remote Performance Monitor for Xbox 360 -työkalu on pelisovelluksen suoritustehon tarkkailutyökalu Xbox 360 -pelilaitteelle. Sen avulla voidaan kerätä monenlaista tietoa suoritustehosta ja suorituksen kulusta suoraan CLR-ajoympäristöstä. Kerätty tieto voidaan näyttää kehitysalustana käytetyssä PC -tietokoneessa, joka on yhdistetty Xbox 360 -pelilaitteeseen lähiverkon välityksellä. Kerätty tieto sisältää esimerkiksi tietoja poikkeuksissa, roskien kerääjän tilasta, JIT-kääntäjän toiminnasta, säikeistä, yms. Nämä tiedot voivat olla hyvin tärkeitä erityisesti peliohjelmiston virheiden etsinnässä sekä optimoinnissa.

14 4.5 Sisältöputki Sisältöputki (content pipeline) on XNA Game Studio -ohjelmistokehitysympäristön ja XNAohjelmistokehyksen tapa käsitellä pelin sisältöä. Se koostuu pelin sisällölle tietyssä järjestyksessä suoritettavista toiminnoista. Sisältöputki suorittaa ensimmäiset toiminnot projektin kääntämisen aikana ja viimeiset ajonaikana, kun sisältöä ladataan. Putki koostuu erilaisista käsittelyvaiheista, joissa kussakin sisällölle tehdään tiettyjä ennalta määrättyjä muunnoksia. Sisältöputken muunnosvaiheet muunnosjärjestyksessä ovat sisällön tuonti, sisällön käsittely, sisällön kääntäminen ja sisällön lataus. Kutakin muunnosvaihetta hoitaa sisältötyyppiin sidottu komponentti, jotka ovat sisällöntuojat (importers), sisällönkäsittelijät (content processors), sisällönkääntäjät (content compilers) ja sisällönlataajat (content loaders). Kukin vaihe saa syötteenä edellisen vaiheen tulosteen. Kuvassa 5.1 havainnollistetaan sisältöputken eri vaiheita sekä vaiheiden syötteitä ja tulosteita.

15 Kuva 1.1: Kuvassa havainnollistetaan pelin sisällön käsittelyn vaiheita sisältöputkessa. Sisältöputken oletustoteutukseen sisältyvät komponentit osaavat käsitellä joitain oleellisimpia tiedostomuotoja. Usein kuitenkin pelinkehittäjä haluaa käyttää tiedostomuotoja, joita perustoteutus ei tue. Sisältöputken arkkitehtuurissa tämä on otettu huomioon, sillä sisältöputkeen voi lisätä tuettuja tiedostomuotoja lisäämällä siihen omia komponentteja. Tämä mahdollistaa sen, että sisältöputki pystyy käsittelemään mielivaltaisessa muodossa olevia tiedostomuotoja, kun vain sopivat komponentit on ohjelmoitu.

16 4.6 Sisältöputken komponentit Sisällöntuojan tehtävä on ladata pelin sisältö lähdetiedostosta projektin käännösvaiheessa ja muuttaa se tiedoston sisältöä vastaavaksi olioksi. Olio voi perustua Content Document Object Model -malliin (Content DOM), johon sisältyy vahva määritys pelin sisällölle, kuten esimerkiksi rautalankamalleille, vertekseille ja pintakuviointikuville (texture). Toisaalta olion sisältämä tieto voi olla täysin itse määritelty. Sisällön tuoja voi käyttää väliaikaistiedostoja muunnettujen lähdetiedostojen säilyttämiseen. Väliaikaistiedostot ovat XML-muodossa ja niiden tarkoitus on helpottaa virheiden etsintää sekä nopeuttaa projektin tulevia käännösprosesseja. Sisällönkäsittelijä ottaa syötteenä sisällön tuojan muodostaman olion ja muodostaa siitä olion, jota peliohjelma voi käyttää ajon aikana. Sisällön käsittelijä määrittelee myös, kuinka luotu olio tallennetaan bittivirraksi. Jos sisällön tuoja antaa tulosteena Content DOM -muotoisen olion, se voidaan käsitellä suoraan sisältöputken kirjastoluokilla. Jos taas sisällön käsittelijän muodostama olio on itse määritelty, sisällön käsittelijän tulee määritellä myös, kuinka se tallennetaan bittivirraksi. Sisällönkääntäjä saa syötteenä sisällön käsittelijöiden tuottamat bittivirrat. Jokainen pelin sisältöosanen on muutettu sitä vastaavaksi bittivirraksi, ja sisällön kääntäjän tehtävä on pakata nämä bittivirrat XNA-ohjelmistokehyksen omaan sisäiseen pakattuun tiedostomuotoon. Tämä prosessi on suljettu, joten sitä ei pysty muokkaamaan laajennoksin. Sisällönlataaja lataa pelin sisällön ajon aikana muistiin luoden niistä olioita, joita sisällön käsittelijä määritteli projektin käännösvaiheessa. Kun oliot on luotu, ne ovat suoraan käyttövalmiina ilman erillisiä käsittelyjä.

17 5 XNA Creators Club Online -yhteisö XNA Creators Club Online -yhteisö [Mic08c] on XNA-pelinkehitysympäristöä käyttäville pelinkehittäjille perustettu yhteisö. Yhteisö rakentuu yhteisön www-sivujen ympärille. Yhteisön www-sivut sisältävät monenlaisia tukipalveluja pelinkehittäjille. Sivuilta löytyy mm. tietoa tapahtumista ja kilpailuista, uutisia yhteisöön ja työkaluihin liittyen, keskustelupalsta liittyen yleisiin sekä teknisiin asioihin ja monenlaisia artikkeleita aiheista kuten työkalujen käytöstä ja peliohjelmoinnin yksityiskohdista. Käytännössä kaikki, mitä aloitteleva XNApelinkehitysympäristön käyttäjä tarvitsee, löytyy tältä sivustolta, joten se on hyvä aloituspaikka kaikille XNA-pelinkehitysympäristöstä kiinnostuneille.

18 Lähteet 9St08 9Star Research, Inc., Microsoft DreamSpark, 2008. https://downloads.channel8.msdn.com/ [2.3.2008] Mic08a Microsoft Corporation, XNA Developer Center, 2008. http://msdn2.microsoft.com/en-us/library/bb200104.aspx [2.3.2008] Mic08b Microsoft Corporation,.NET Framework Developer Center, 2008. http://msdn2.microsoft.com/en-us/library/w0x726c2.aspx [1.3.2008] Mic08c Microsoft Corporation, XNA Creators Club Online, 2008. http://creators.xna.com/ [1.3.2008] Wik08 Wikipedia,.NET, 2008. http://fi.wikipedia.org/wiki/.net [1.3.2008]