univerzitet u niŠuunarske... · se sve mora „pešaka“ odraditi. s druge strane, xna okruženje...

58
UNIVERZITET U NIŠU PRIRODNO-MATEMATIČKI FAKULTET DEPARTMAN ZA RAČUNARSKE NAUKE 2D video igra u XNA okruženju MASTER RAD Mentor: Student: dr Marko D. Petković Luka Lovre Niš, 2017.

Upload: others

Post on 04-Jan-2020

3 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

UNIVERZITET U NIŠU

PRIRODNO-MATEMATIČKI FAKULTET

DEPARTMAN ZA RAČUNARSKE NAUKE

2D video igra u XNA okruženju

MASTER RAD

Mentor: Student:

dr Marko D. Petković Luka Lovre

Niš, 2017.

Page 2: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

1

Sadržaj

Sadržaj ................................................................................................................................................. 1

Uvod .................................................................................................................................................... 2

1. XNA okruženje ................................................................................................................................. 3

1.1 O XNA okruženju ..................................................................................................................... 3

1.2 Osnove pokretanja okruženja ................................................................................................. 6

1.3 Tok rada .................................................................................................................................. 7

1.4 Učitavanje sadržaja ................................................................................................................. 8

1.5 Ažuriranje .............................................................................................................................. 11

1.6 Iscrtavanje ............................................................................................................................. 12

1.7 Kombinovanje tri metode ..................................................................................................... 15

1.8 Input ...................................................................................................................................... 16

1.9 Muzika ................................................................................................................................... 18

1.10 Animacija ............................................................................................................................... 19

2. 2D Motion Capture ....................................................................................................................... 22

2.1 Osnove praćenja pokreta ...................................................................................................... 22

2.2 Zašto Motion Capture? ......................................................................................................... 27

2.3 Implementacija ..................................................................................................................... 28

2.4 Upotreba u igri ...................................................................................................................... 34

3. Rukovođenje resursima ................................................................................................................ 35

3.1 Učitavanje tekstura ............................................................................................................... 35

3.2 Učitavanje mape ................................................................................................................... 36

4. Struktura igre ................................................................................................................................ 38

4.1 Glavni ciklus igre ................................................................................................................... 38

4.2 Objekti unutar video igre ...................................................................................................... 39

5. Funkcionalnosti video igre ............................................................................................................ 45

5.2 Interakcija sa objektima ........................................................................................................ 45

5.3 Stanje inspekcije ................................................................................................................... 46

5.4 Ponašanje likova unutar igre ................................................................................................. 48

6. Pomoćni alati za rad ...................................................................................................................... 49

6.1 2D Motion Capture aplikacija ............................................................................................... 49

6.2 Editor mape ........................................................................................................................... 51

6.3 Učitavanje slika ..................................................................................................................... 52

7. Zaključak........................................................................................................................................ 54

8. Literatura....................................................................................................................................... 55

Page 3: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

2

Uvod

Ovim radom je obuhvaćen proces pravljenja 2D video igre unutar XNA okruženja. Osim

specifičnosti konkretnog XNA okruženja i šta pruža izradi 2D igara, ovaj rad će se pozabaviti i

svim dodatnim alatima koji su napravljeni u svrhu poboljšanja igre. Alati kao sto su 2D Motion

Capture, za praćenje pokreta sa kamere i animiranje figura unutar igre. MapEditor alat za

manipulaciju objektima unutar igre i olakšavanje samog procesa dizajniranja mape unutar

video igre, kao i alati za izradu 2D tekstura i njihovu obradu kako bi se prilagodili video igri.

Kroz ovaj rad biće pokriven svaki aspekat pravljenja 2D video igre, ne samo konkretne izrade,

već i planiranja, ideja, promene planova, menjanje koda, refaktorisanje, kao i sam proces

produkcije. Zato što za izradu nije korišćen već gotovi video game engine, kao što bi bio slučaj

da je korišćen Unity ili GameMaker, morao se napraviti 2D engine, pošto XNA okruženje

podržava samo osnovne operacije.

Page 4: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

3

1. XNA okruženje

1.1 O XNA okruženju

Mikrosoftovo XNA okruženje (rekurzivni akronim od XNA’s not acronymed) je napravljeno

eksplicitno za izradu video igara (Slika 1.1). Mikrosoft je već imao DirectX okruženje za izradu

igara ali XNA je predstavljao korak bliže ka izradi manjih kao i indie video igara. U prilog tome

je išlo što je XNA rađen u .NET okruženju, čime je znatno olakšan početak izrade video igra

kod programera koji ne žele da zalaze u dubine C++-a kao što je to slučaj sa DirectX

platformom. Sam rad u XNA okruženju se izvršava preko Visual Studio-a, u C# programskom

jeziku.

Slika 1.1

XNA je dizajniran tako da može da bude podržan na više Mikrosoftovih platforma, kao što su

Windows, Xbox 360 kao i Windows Phone. XNA je osnovna platforma za Xbox Live Indie

Games, koja je bila popularna platforma na Xbox-u za izbacivanje indie igara raznog tipa.

XNA je prvi put izbacio alate za izradu igara još 2006 godine i od tada je dosta poznatih, manjih,

igara izašlo pomoću njega. Iako je zvanično podržavanje XNA-a završeno 2013 godine i dalje

se proizvode video igre pomoću njega.

Neke od popularnijih video igara napravljene uz pomoć XNA okruženja:

Chime (2010), Bastion (2011), Terraria (2011), Fez (2012), Owlboy (2016), Stardew Valley

(2016)

Page 5: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

4

Terraria (2011)

Fez (2012)

Stardew Valley (2016)

Page 6: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

5

Kao što vidimo, XNA je i dalje od prevaziđenog, tome je još i pripomoglo zato što se godinama

sakupilo dosta pitanja i odgovora na internetu o raznim rešenjima problema, a i sama

dokumentacija je detaljno odrađena.

XNA okruženje nema u sebi sadržan kompleksni game engine, koji omogućava obradu

osvetljenja, kolizije objekata, pronalaženje putanja između dve tačke i ostale pogodnosti, pa

se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i

samim tim što ne daje previše funkcionalnosti „iz kutije“, daje samom dizajneru igre i

programeru dodatnu slobodu za eksperimentisanje.

Posle zatvaranja zvanične podrške XNA okruženja, par nezavisnih projekata je nastavilo rad

na XNA okruženju i napravilo poboljšanja za novije sisteme, kao sto su Android telefoni i iOS.

Mono Game (Slika 1.2) okruženje je fokusirano na adaptiranju XNA okruženja za ostale, novije

sisteme, dok je FNA re-implementacija svih osnovnih XNA funkcija u cilju očuvanja originalnog

XNA koda. ANX okruženje je ugradnja podrške za Linux kao i za PlayStation unutar XNA

okruženja.

Slika 1.2

Za ovaj rad je izabrano XNA okruženje zato što je intuitivno za rad a i daje mogućnost izazova

da se engine video igre napravi gotovo ispočetka, i time dobije bolji uvid u sve procese kroz

koje video igra prolazi.

Page 7: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

6

1.2 Osnove pokretanja okruženja

Kako bi se XNA okruženje koristilo unutar projekta potrebno je prethodno da se instalira

Microsoft XNA Framework Redistributable. Posle instalacije, sve neophodne biblioteke su

dostupne za rad unutar Visual Studio-a.

U Visual Studio-u zatim treba da se izabere novi XNA game projekat kako bi se napravio šablon

za izradu video igara (Slika 1.3). Svaki projekat za video igre unutar XNA sadrži dva pod-

projekta. Jedan služi za celu logiku igre, a drugi za smeštanje sadržaja igre, kao sto su teksture

i zvukovi. Unutar prvog projekta se pozivaju metode za rad sa sadržajem iz drugog projekta za

sadržaj. Ovim pristupom je odvojen sadržaj od logike igre.

Slika 1.3

XNA okruženje je rađeno u osnovi sa .NET okruženjem, verzijom 4.0. Rad sa kasnijim verzijama

.NET okruženja nisu podržani u osnovnoj verziji XNA okruženja. Poslednji Visual Studio koji

podržava XNA okruženje je Visual Studio 2015, iako postoje i manuelne prepravke kako bi XNA

radio i na Visual Studio 2017 verziji.

Page 8: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

7

1.3 Tok rada

Kada se napravi novi Game projekat sa XNA okruženjem, napravljene su tri osnovne metode

svakog XNA projekta: Load, Update i Draw (Slika 1.4).

Dok se Load metoda poziva samo na početku inicijalizacije, Update kao i Draw metode se

pozivaju konstantno u toku izvršavanja video igre. Broj puta koliko se Update i Draw metode

izvršavaju je zavistan od performansi računara, odnosno koliko brzo može da prođe kroz te

metode i napravi ponovni krug. Standardna brzina izvršavanja tih metoda unutar video igara

je šezdeset puta u sekundi. Idealno je da se brzina izvršavanja logike igre kao i njenog

prikazivanja dešava istom brzinom kao i brzina osvežavanja monitora, kako bi video igra tekla

u „ritmu“ monitora. Ovim se izbegava efekat kašnjenja slike, unutar Draw metode, i dobijaju

se preciznije rezultati interakcije, unutar Update metode.

Slika 1.4

Page 9: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

8

1.4 Učitavanje sadržaja

Većinu memorije jedne video igre sačinjava njen sadržaj. Sadržaj mogu sačinjavati razni

elementi ali su uglavnom slike i zvuci.

Unutar XNA projekta sav sadržaj je smešten unutar odvojenog projekta. GameContent

projekta. Za ovaj projekat su od sadržaja korišćene teksture, zvukovi kao i obični tekst fajlovi.

GameContent projekat nije obavezan da se koristi. Mogu se koristiti i nezavisni eksterni folderi

i u kojima će biti smešteni svi potrebni podaci za igru, i onda posebnim metodama da se ti

podaci učitavaju unutar video igre.

Iako je ovakav pristup validan, nije preporučen. XNA GameContent projekat osim skladištenja

svog sadržaja radi konvertovanje kao i učitavanje u igru njegovim ugrađenim i optimizovanim

algoritmima.

Sve slike koje su ubačene u GameContent projekat se čuvaju unutar projekta u njihovom

formatu (jpeg, png, bmp). Kada se projekat izvršava GameContent konvertuje sve slike u xnb

format i onda njega učitava u samu igru.

Xnb format nije dostupan za čitanje standardnim alatima za pregled slika zato što je

kompresovan i optimizovan da se učitava unutar XNA video igre. Ovaj format je do par puta

manji od originalne slike i učitava se isto toliko puta brže unutar same video igre.

Kada se slika učitava unutar igre ona se dodeljuje odgovarajućoj teksturi, koja se iscrtava na

ekranu. Teksture u XNA okruženju su klase Texture2D. Kada se slika učita preko

GameContent projekta ona se, posle konverzije u xnb format, brzo dodeli Texture2D klasi.

Da bi se isti efekat postigao bez da se prolazi kroz GameContent projekat slika mora da se, u

kom god da je formatu, pretvori u Texture2D objekat, tj. da zadovoljava karakteristike

Texture2D objekta.

Texture2D objekat čuva sliku kao jednodimenzionalni niz njenih boja. Osobine koje

karakterišu sliku, osim samih boja su i visina i širina. Sa informacijama o širini i visini

Texture2D od jednodimenzionalnog niza pravi dvodimenzionalnu sliku.

Sa druge strane je slika koju treba da učitamo u igru i da je „manuelno“ konvertujemo u

Texture2D. Učitavanje slike se izvršava metodom Image.FromFile("putanja do

slike"). Bitmap je standardna klasa .NET okruženja i ona sadrži informacije slike unutar

dvodimenzionalne matrice. Boja svakog piksela unutar slike je sačuvana u matrici sa

informacijom o poziciji u odnosu na x i y osu.

Page 10: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

9

Jednostavnim algoritmom za konverziju podataka iz Bitmap klase u podatke Texture2D

klasu možemo učitavati sliku u igru (isečak iz koda dole). Jedini problem kod ovakve metode

je da je proces mnogo sporiji od standardnog učitavanja XNA optimizovana slike xnb formata.

private Texture2D LoadFromPNG(string name, string types, int frameNumber){ Texture2D tex;

using(Bitmap image = new Bitmap(Path.Combine("MapEditor output", name, types,

frameNumber + IO.PictureFormat))){

var sourceRectangle = new Rectangle(0, 0, image.Width, image.Height); tex = new Texture2D(Game1.Instance.GraphicsDevice, sourceRectangle.Width,

sourceRectangle.Height);

var data = new Color[sourceRectangle.Width * sourceRectangle.Height]; for(var y = 0; y < image.Height; y++){ for(var x = 0; x < image.Width; x++){ data[sourceRectangle.Width * y + x] = new Color(image.GetPixel(x, y).R,

image.GetPixel(x, y).G, image.GetPixel(x, y).B, image.GetPixel(x, y).A);

} } tex.SetData(data); } return tex; }

Zašto bi smo onda učitavali slike na tako spor i nestandardan način unutar video igre? Projekat

ovog rada kombinuje oba načina. Zato što standardan, efikasniji i brzi način pretvara slike u

xnb format, one ne mogu da se menjaju van XNA projekta. To nije problem programeru koji

ima pristup kodu ali je problem za običnog korisnika video igre. Kako bi svaki korisnik mogao

da ima pristup svim resursima koji se prave za video igru, moraju resursi da budu u dostupnim

formatima, kao što su png i ostali formati za sliku koji se mogu otvoriti u MS Paint-u ili u

složenijim programima kao što je Adobe PhotoShop ili drugim (Slika 1.5 – Paint.NET).

Page 11: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

10

Slika 1.5

Dati svakom korisniku moć da menja i ubacuje teksture unutar igre je veoma bitna stvar zato

što se time podstiče personalizacija video igre kao i deljenje kreacija sa ostalim igračima.

Mogu se praviti celi kompleti drugačijih slika kako bi se celokupna atmosfera igre promenila,

ili se može promeniti samo izgled jednog šešira unutar igre. Bitno da se takve promene mogu

izvršiti lako i brzo, i vredno je čekanja dodatnog vremena za učitavanje teksture.

Ostali fajlovi koji su korišćeni za video igru unutar GameContent projekta su muzički fajlovi.

MP3 format za muziku kao i WAV format za zvukove i specijalne efekte kao što su zvuk pucnja,

koračanja i ostali.

Od ostalog sadržaja za video igru projekat koristi i tekstualne fajlove, obične .txt ekstenzije. U

njima se čuvaju podaci o objektima kao i njihove lokacije. Umesto da su lokacije upisane

direktno u kod, učitavane su iz ovih txt fajlova. Njihovom promenom se menjaju osobine kao

i pozicije predmeta unutar igre. Takođe su dostupni za manipulaciju od strane korisnika.

Page 12: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

11

1.5 Ažuriranje

Unutar Update metode se izvršava celokupna logika video igre. Ona se izvršava, u proseku,

šezdeset puta u sekundi. Kod nekih igara umesto jedne Update metode postoje dve, jedan

Update za logiku igre a drugi update da odrađuje fiziku unutar igre. Ovakav način se koristi

samo kod igara kod kojih je deo za obradu fizike znatno veći nego u ovom projektu.

Fizika igre podrazumeva sve događaje koji su „nezavisni“ od tipa igre. Takvi događaji u

projektu su događaji sudara dva objekta, tj. provera da li se u bilo kom trenutku dva objekta

sudaraju.

Logika igre podrazumeva događaje koji su specifični za igru. Šta se dešava kada se dva objekta

sudare, ako je to slučaj sa metkom i buretom benzina onda logika igre odlučuje da se tada

aktivira animacija eksplozije (Slika 1.6). Logika igre rukovodi svim slučajevima i interakcijama

među objektima u igri.

Slika 1.6

Update metoda, osim što obavlja fiziku i razrešava razne slučajeve pokrivene u igri, pomera i

figure. Kada se u Update metodi stavimo da se pozicija figure promenila za 1 piksel u x osi

onda će se, prilikom iscrtavanja te figure, ona nacrtati na promenjenoj poziciji.

Page 13: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

12

1.6 Iscrtavanje

Da bi se bilo šta iscrtavalo na korisničkom ekranu unutar XNA okruženja, koristi se Draw

metoda. Ona se, poput Update metode, ponavlja u proseku šezdeset puta u sekundi. Svaki

put kada se izvrši Draw metoda, ekran se osveži i prikaže se nova slika. Ako se slike osvežava

manje od šezdeset puta ili čak manje od 30 puta, dolazi do efekta kočenja, gde se iz jednog

stanja slike preskače u drugi, bez jasne linije kako. Postoji i opasnost kada se slika osvežava u

nejednakim intervalima, šezdeset puta u jednom trenutku a 45 puta u drugom. Ovako se

postižu čudni pokreti koji daju igraču osećaj nejednakosti pokreta. Idealno je da je broj

osvežavanja što veći ali ne po cenu da ne može da bude konstantan u toku trajanja cele igre.

Pre bilo kakvog iscrtavanja na ekran mora se prvo osigurati da je prethodno iscrtan ekran

očišćen. Pre početka svakog iscrtavanja scene „kanvas“ se prazni

Graphics.GraphicsDevice.Clear(Color.White) metodom. Ova metoda postavlja

boju celog ekrana na belu, u ovom slučaju. Svaki region ekrana na kome nije iscrtan predmet

obojiće se u belu boju.

Zatim se poziva metoda SpriteBatch.Begin kojim se označava početak iscrtavanja

tekstura na ekranu. Završetak iscrtavanja se označava pozivanjem metode

SpriteBatch.End. Pozivi za samo iscrtavanje tekstura se izvršavaju između ove dve

metode. Redosled iscrtavanja tekstura je bitan zato što on određuje kod preklopljenih

tekstura koja će biti ispre a koja iza.

Iscrtavanje teksture se izvršava metodom SpriteBatch.Draw. Ova metoda kao prvi

parametar uzima Texture2D objekat koji predstavlja teksturu objekta. Drugi parametar je

Rectangle klase. U njemu se zadaje pozicija početka iscrtavanja teksture, u

dvodimenzionalnom prostoru, kao i kolika će širina i visina iscrtane teksture biti. Osim ovih

primarnih parametara za osnovno iscrtavanje postoje još parametri za rotaciju, za centar

rotacije, za transparentnost teksture kao i za dodatne vizualne efekte.

Page 14: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

13

U svakom trenutku video igre potrebno je iscrtati velike količine zasebnih tekstura, od kojih

se neke pokreću i menjaju svoju poziciju, preklapajući se sa drugim teksturama. Treba se

zadati određeni parametar koji će da odlučuje koje teksture se iscrtavaju pre drugih, i kojim

redosledom, u suprotnom će da se iscrtavaju redosledom kojim su pozivane, a to je prilično

nasumično (Slika 1.7).

Slika 1.7

Kamera video igre gleda na scenu iz ptičje perspektive. To znaci da su objekti koji se nalaze pri

vrhu ekrana dalji a objekti koji su niže na ekranu, bliži. Da bi se postigao ovakav redosled

iscrtavanja objekata svakom objektu je dodat parametar koji daje njegovu poziciju u odnosu

na y osu. Svi objekti, pre iscrtavanja, se smeštaju u posebnu listu za iscrtavanje objekata. Pre

iscrtavanja nad listom se izvrši sortiranje svih objekata po y osi i zatim se jedan po jedan

iscrtavaju. Ovima se postiže željeni efekat (Slika 1.8).

Page 15: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

14

Slika 1.8

Scena je iscrtana i objekti se pokreću na ekranu, ali je kamera i dalje fiksirana. Kada korisnik

želi da izađe van domena trenutne scene potrebno je pomeriti sve teksture u stranu, kako bi

glavni lik bio u centru. Umesto da se svakoj teksturi zasebno izračunava pomeraj, iskorišćen

je parametar za kameru unutar SpriteBatch.Begin metode. Potrebno je da se prosledi

matrica transformacije koja će da bude primenjena nad svakim pikselom pri iscrtavanju slike.

Ova matrica je sačinjena od elemenata trenutne pozicije glavnog igrača unutar video igre

(njegove x i y koordinate), kako bi igrač uvek bio u centru kamere. Osim pozicije dodati su i

zoom kao i rotacija, u slučaju da treba kamera da se rotira ili da se približi objektima.

public static Matrix GetTransformation(){ return Matrix.CreateTranslation(new Vector3(-Position.X, -Position.Y, 0)) * Matrix.CreateRotationZ(Rotation) * Matrix.CreateScale(new Vector3(Zoom, Zoom, 1)); }

Page 16: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

15

1.7 Kombinovanje tri metode

Kombinovanjem Load, Update kao i Draw metode se kompletira glavni ciklus igre. Sve ostale

funkcije, kako bi bile sadržane u igri moraju biti primenjene u jednoj od ove tri metode.

Kao osnovni primer ovakvog toka rada je primer pomeranja kvadrata.

Load metodom se učitava tekstura kvadrata unutar igre.

U Update metodi se svakom iteracijom pozicija kvadrata povećava za jednu vrednost po x

osi.

Posle svake promene pozicije se kvadrat iscrta na ekranu na novoj poziciji, Draw metodom.

Ovaj primer demonstrira osnovnu funkcionalnost XNA okruženja i po kojoj logici rade video

igre. Sve ostale funkcionalnosti su nadovezivanja na ovaj princip (Slika 1.9).

Slika 1.9

Page 17: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

16

1.8 Input

Kako bi korisnik mogao da igra video igru i da pomera i kontroliše glavnog lika mora se

implementirati metoda za prepoznavanje korisničkog unosa podataka.

Zato što je video igra rađena za računare, umesto za konzole, vrsta korisničkog unosa može

da bude raznovrsna. Na konzolama je unos samo preko džojstika koji dolazi uz konzolu, i

eventualno par dodatnih periferija. Računari podržavaju gotovo sve vidove korisničkog unosa,

preko standardnih, kao što su miš i tastatura, džojstik, pa do raznih periferija kao volani,

pedale, TrackBall kao i displeji na dodir.

Video igra projekta prima korisničke unose preko tastature i miša kao i džojstika. XNA

okruženje, pošto je napravljeno od strane Mikrosofta, ima ugrađenu podršku za Xbox

džojstike i sve njihove funkcionalnosti kao što su palice i vibracija.

Unos podatka sa Xbox džojstikom:

private static bool PickUp=>GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.A) private static bool Drop=>GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.B) private static bool Use=>GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.X) private static bool Enter=>GamePad.GetState(PlayerIndex.One).IsButtonDown(Buttons.Y) private static bool Shoot=>GamePad.GetState(PlayerIndex.One).Triggers.Right > 0f private static bool Pin=>GamePad.GetState(PlayerIndex.One).Triggers.Right >= 0.8f

Unos podataka tastaturom i mišem:

private static bool IsKeyDown(Keys keys) { return Keyboard.GetState().IsKeyDown(keys); }

Oba pristupa su implementirana unutar video igre, kako bi korisnik mogao da izabere njemu

najudobniji pristup. Kontrole za tastaturu se učitavaju iz tekstualnog fajla koji korisnik može

da modifikuje ako mu se standardni raspored kontrola ne svidi.

Page 18: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

17

Najudobniji način za doživljaj igre je preko džojstika, ne samo zato što je napravljen da se

pogodno drži u rukama nego i zbog preciznosti kontrola. Pri pokretu glavnog lika preko strelica

na tastaturi postoji samo dva stanja dugmeta, kliknuto ili ne. Tako da igrač može da se kreće

samo jednom brzinom u određenom pravcu ili da se ne pokreće. Palice kod džojstika

omogućavaju mnogo udobniju i precizniju kontrolu pokreta igraća. Kada se palica pomeri

ulevo on ne vraća bool vrednost nego vraća float vrednost između 0 i 1. Nula znači da se

lik ne pomera u tom pravcu, a jedan da se pomera maksimalnom brzinom. Sve vrednosti

između, tj. svi položaji palice koji su između puštenog i uperenog skroz u jednu stranu daju

niz među brzina. Blagim pomeranjem palice igrač može da se pokreće polovinom svoje brzine

i time simulira spori hod. Sam prelazak u stanje pokreta nije spontan, kao sto je u slučaju sa

strelicama na tastaturi, već ima par delića sekundi koji su u „zaletu“. Ovo doprinosi mnogo

boljem i prirodnijem osećaju pokretanja igrača.

Slika 1.10

Kako bi ovaj efekat glatkog pokreta preneli i na korisnike koji nemaju džojstik moramo da

upotrebimo miša. Umesto da korisnik ima četiri strelice koje diktiraju smer u kome se kreće

igrač, ima samo jedan taster, taster za pokret. Kada je taster za pokret kliknut onda se igrač

kreće, u suprotnom stoji. Pravac kretanja igrača, kada je taster kretanja kliknut, je pravac koji

se dobija povlačenjem linije od centra igrača do trenutne pozicije miša. Brzina kretanja igrača

je jednaka razdaljini tačke trenutne pozicije miša od centra igrača (Slika 1.10).

Vector2 leftThumbStick = GamePad.GetState(PlayerIndex.One).ThumbSticks.Left; if(IsKeyDown(Keys.W)) {

float radius = 200; float x = Camera.Camera2D.Center.X - Mouse.GetState().X; float y = Camera.Camera2D.Center.Y - Mouse.GetState().Y; var mouseToThumbStick = new Vector2(-x / radius, y / radius); leftThumbStick = mouseToThumbStick; }

m_player1.Move(leftThumbStick);

Page 19: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

18

1.9 Muzika

Audio fajlovi se učitavaju u igru kao i ostali sadržaj, preko GameContent projekta. Postoje dva

tipa audio fajla koja mogu da se učitaju, mp3 i wav.

Mp3 fajlovi su kompresovani audio fajlovi koji zauzimaju do deset puta manje memorije od

wav fajlova. Mp3 fajlovi se učitavaju u Song klasu. Wav fajlovi su znatno veći i oni nisu

kompresovani. Wav fajlovi se učitavaju unutar SoundEffect klase. Song i SoundEffect su

dve osnovne klase u kojima se muzika čuva i reprodukuje unutar video igre. Audio fajlovi se

puštaju Play metodom koja ima parametre za jačinu zvuka kao i pitch i pan parametre, za

dodatno štelovanje zvuka.

Zato što je mp3 audio fajl kompresovana pesma, unutar Song klase može samo da se pušta i

pauzira, metodama Play i Pause. Ne može da se bira trenutak od koje sekunde će se puštati

reprodukcija pesme. Može samo jedna pesma da se pušta u bilo kom zadatom trenutku, XNA

okruženje ne podržava puštanje paralelnih pesama.

Wav fajlovi, pomoću SoundEffect klase, mogu da se puštaju iz bilo kog trenutka audio

snimka. Može da se pušta paralelnih wav fajlova koliko sama konfiguracija mašine dozvoljava,

nije ograničeno unutar XNA okruženja. Zbog velikog memorijskog prostora koju wav fajlovi

zauzimaju, koriste se pretežno za specijalne efekte koji su u dužini znatno kraći od cele pesme

od par minuta.

dieSound = Game1.Instance.Content.Load<SoundEffect>(@"SoundEffects\die"); gunSound = Game1.Instance.Content.Load<SoundEffect>(@"SoundEffects\gun"); explosionSound = Game1.Instance.Content.Load<SoundEffect>(@"SoundEffects\explosion");

public void Play(SoundType soundType){ switch(soundType){ case SoundType.Die: dieSound.Play(MasterVolume * GameEffectsVolume, 0.0f, 0.0f); break; case SoundType.Gun: gunSound.Play(MasterVolume * GameEffectsVolume, 0.0f, 0.0f); break; case SoundType.Explosion: explosionSound.Play(MasterVolume * GameEffectsVolume, 0.0f, 0.0f); break; case SoundType.Hover: hoverSoundEffect.Play(MasterVolume * GuiVolume, 0.0f, 0.0f); break; } }

Page 20: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

19

1.10 Animacija

Kako teksture koje su učitane unutar igre ne bi bile statične, mora se implementirati sistem

animacije. Animiranjem objekata unutar igre se stvara efekat da igra nije „mrtva“, tj. da uvek

ima dešavanja i pokreta na ekranu. Animacije mogu da se upotrebe u razne svrhe, od

eksplozija pa do pomeranja travki na vetru. Što više detalja se uloži u animiranje objekata to

je scena življa i realističnija u pogledu pokreta.

XNA okruženje ima već ugrađenu metodu za animaciju, ali unutar projekta nije korišćena već

je napravljena iznova novi mehanizam animacije, kako bi se imao veći uvid i kontrola nad svim

detaljima animiranja.

Efekat da se neki objekat animira se postiže tako što se smenjuju slike pomeraja njegove

pozicije, jedna za drugom, u redosledu. Ovi osnovni koncepti animacije su doveli do stvaranja

prvih filmova (Slika 1.11).

Slika 1.11

Page 21: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

20

Standard za filmove je 24 kadra u jednoj sekundi. Time se čovekovo oko „prevari“ i ostvaruje

se efekat animacije objekta unutar tih kadrova. Za animaciju animiranih filmova na televiziji

je standard šest kadrova u sekundi. Od broja kadrova u sekundi zavisi i kvalitet animacije, što

je broj veći to je animacija elegantnija i ima više detalja. Problem kod animiranja većeg broja

kadrova u sekundi je samo iscrtavanje tih kadrova, koje oduzima dosta vremena kao i napora

od animatora. Zbog ovog razloga samo visokobudžetni animirani filmovi mogu da priušte više

od šest do dvanaest kadrova po sekundi (Slika 1.12).

Slika 1.12

U projektu je odrađena implementacija animacije tako što se prvo sve teksture jednog

animirajućeg objekta učitaju. Unutar foldera gde je smeštena glavna tekstura objekta

smeštene su i sve druge slike koje, kada se prikazuju jedna za drugom, stvaraju animaciju.

Page 22: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

21

Redosled kojim se slike smenjuju je obeležen njihovim imenima. Unutar foldera su imena slika

poređana od nula pa naviše. Kada se teksture učitavaju one su već sortirane po svom imenu

originalnog fajla (Slika 1.13).

Slika 1.13

Sve potrebne teksture su učitane unutar sortiranog niza tekstura koje pripadaju određenom

objektu. Unutar igre postoji merač vremena koji obaveštava objekat kada treba da zameni

sledeću teksturu. Kada dođe vreme za zamenu onda se uzima sledeća tekstura u nizu i zameni

trenutna tekstura za prikaz. Kada se dođe na kraj niza sa teksturama onda se opet kreće sa

početka niza, stvarajući konstantni krug animacije.

Animacije su poređane po vrstama. Osnovna vrsta animacije je Idle vrsta, odnosno animacija

koja se izvršava kada objekat ne radi ništa. To može biti neonski znak na zidu koji trepće, ili

trava koja se njiše. Ostali tipovi animacije se izvršavaju zavisno od slučajeva i stanja u kojima

se objekat nađe. Ako je bure upucano ono pokreće animaciju eksplozije koja se izvršava. Kada

pištolj ispuca metak pokreće se animacija dima iz cevi.

Page 23: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

22

2. 2D Motion Capture

2.1 Osnove praćenja pokreta

Postoji više različitih tehnika koje su se razvijale za praćenje pokreta:

Metoda pasivnih obeleživača

Osoba koja ja snimana je obučena u crnu odeću. Na svim zglobovima se nalaze bele kuglice

(Slika 2.1). Ove kuglice će obeležavati koji delovi figure će da budu animirani. Kamere su

postavljene oko osobe i svaka kamera ima upereno svetlo ka osobi. Svetlom kamere

obasjavaju se bele loptice i time lakše mogu da se prepoznaju tačne pozicije svake loptice na

video snimku. Istim metodom se mogu pratiti i pokreti mišića na licu (Slika 2.2). Time se

dobijaju verodostojni izrazi lica karaktera.

Slika 2.1

Page 24: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

23

Slika 2.2

Metoda aktivnih obeleživača

Aktivni obeleživači su napravljeni tako da mogu da emituju svetlost. Svaki od obeleživača, koji

su u obliku trakica, treperi određenim ritmom. U svakom trenutku samo jedna traka treperi.

Ova treperenja su veoma brza i nisu primetna ljudskom oku. Ovom metodom kamere u

svakom trenutku vide samo jedan obeleživač, dok su ostali ugašeni. Time je olakšano

prepoznavanje željene tačke i dobijaju se precizniji rezultati (Slika 2.3).

Slika 2.3

Page 25: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

24

Metoda bez obeleživača

Ova metoda od osobe čiji su pokreti snimani ne zahteva nikakve dodatne obeleživače. Može

da bude bilo kako obučena. Za ovu metodu je potrebno podesiti 7 kamera oko osobe, kao bi

se uhvatili pokreti iz svih uglova. Zatim se proučavaju promene piksela na svakoj slici od tih

sedam kamera i pravi se foto-realističan model osobe u virtualnom svetu (Slika 2.4).

Slika 2.4

Sistemi inercije

Ovakva metoda ne zahteva nikakve kamere. Osoba nosi odelo sa kuglicama na zglobovima.

Svaka kuglica prati podatke o pokretu pomoću internih senzora za merenje ubrzanja i rotacije.

Ovi podaci se zatim bežično prenose do računara. Ova metoda je postala sve popularnija kod

manjih studija zato što, nasuprot metodama koje koriste kamere, ne zahteva da se montira

studio za svrhe praćenja pokreta (Slika 2.5).

Slika 2.5

Page 26: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

25

Mehaničko praćenje pokreta

Kod ove metode isto nisu potrebne kamere za praćenje pozicija zglobova. Osoba koja izvršava

pokrete treba da obuče odelo na koje je prikačene skeletna struktura. Kako pomera zglobove

tako se pomera i skelet zakačen na odelu. Skelet zatim bežičnim putem prenosi informacije o

uglovima pomeraja svih zglobova i podaci se izračunavaju i prikazuju na računaru. Ova metoda

je iz istih razloga praktična kao i metoda sistemom inercije (Slika 2.6).

Slika 2.6

Page 27: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

26

Kako nema svako visoko-budžetnu opremu i studijo za praćenje pokreta, aplikacija je

pravljena sa običnim korisnicima u vidu. Od početka izrade aplikacije nije se računalo na visok

kvalitet video opreme niti na dobru opremljenost korisnika u pogledu odela za snimanje kao

i kuglica za zglobove. Preduslov za snimanje pokreta čoveka je taj da kamera video rekordera

bude uperena ka čoveku pod uglom od devedeset stepeni. Razlog za to je da bi se dobijene

tačke pozicija figure mogle odmah primenjivati, bez dodatnih transformacija koje bi otežale

rad.

Slabiji kvalitet kamere za snimanje pokreta može da dovede do slabijih rezultata i težeg

pronalaženja traženih zglobova. Da bi izbegli ili pak umanjili neželjeni efekti mora se za nijansu

povećati kontrast i zasićenost (saturation) u post-produkciji snimanja korišćenjem određenih

alata za video montiranje i korekciju boje. Time se boje bolje međusobno razlikuju i olakšavaju

aplikaciji posao pronalaženja specifičnih regiona (Slika 2.7). Još jedna preporuka tokom

snimanja je da se svi pokreti po mogućnosti snime usporeno kako bi se izbegle zamućenja na

snimku prilikom veće brzine (blur).

Slika 2.7

Page 28: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

27

2.2 Zašto Motion Capture?

Izrada animacija je veoma važan korak prilikom razvoja 2D video igre. Pritom je i važno da

pokreti karaktera unutar igre budu što prirodniji i da što vernije preslikavaju odgovarajuće

pokrete ljudi. Samim tim, programi za snimanje pokreta često se koriste pri izradi ovakvih

animacija

Ono što se dalo odmah primetiti kod klasične animacije u video igri je da je, za razliku od

animiranih TV programa, potrebno animirati i sve dodatne akcije figure sa svim

kombinacijama pokreta. Držanje pištolja, držanje pištolja u hodu, u trku, u skoku. Zatim za sve

kombinacije objekata i pozicija se mora zasebno animacija odraditi.

Zbog jednostavnosti dobijanja verodostojnih animacija kao i brzinom kojom se one mogu

dobijati, industrija filma kao i video igara su odabrala Motion Capture kao primarno sredstvo

za animiranje kompleksnih pokreta kako tela tako i lica čoveka.

Algoritam koji je korišćen za implementaciju 2D Motion Capture-a unutar projekta nije najbrži

niti najoptimalniji algoritam, ali za potrebe video igre je poslužio i odradio posao koji je trebao.

Dalja poboljšanja algoritma bi ubrzala procese analize snimka kao i povećale preciznost

izlaznih podataka animacije ali je prezentovano rešenje najbrže došlo do željenih rezultata.

Page 29: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

28

2.3 Implementacija

Osnovna ideja za algoritam proizilazi iz toga da sliku posmatramo kao matricu gde je svako

polje unutar nje jedna boja predstavljena RGB vrednostima (Red, Green, Blue) (Slika 2.8) i

zatim prolaskom kroz tu matricu nalazimo tražene tačke na snimku čoveka u pokretu koje će

da budu odgovarajuće tačke na figuri unutar 2D video igre. Svaki zglob čoveka koji radi

pokrete na snimku mora da se preslikava 1 na 1 unutar 2D prostora sa figurom kako bi se

zadržale proporcije.

Slika 2.8

Dobijanje slike iz video snimka

Slika je posmatrana kao matrica boja što je i generalno slučaj sa slikama standardnih formata.

Iz videa se dobija slika tako što se pozove preko XNA okruženja kao video (Slika 2.9).

XNA okruženje puštanje videa posmatra kao izvlačenje slike po slike iz videa i zasebno

prikazivanje svake, jedna za drugom. Pre no što se slika prikaže mora se obraditi i zatim

korisniku poslati prerađena slika sa izdvojenim zglobovima.

Slika 2.9

Page 30: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

29

Pronalaženje traženih boja zglobova

Prvi korak je da se iz slike, gledane kao matrice boja, prođe redom i pronađe tražena boja

(boja nalepnica na zglobovima osobe). Unutar programa se nalaze već određene,

predefinisane boje koje odgovaraju traženoj boji roze nalepnice (Error! Reference source not

found. levo). To je lista boja u kojima se sve nalepnica može pojaviti (Slika 2.10 desno).

Algoritam kada traži sličnu boju traženoj prepoznaje je samo ako je u opsegu od par procenata

slična po RGB vrednostima boje. Za svaku vrednost R, G i B-a je provereno ponaosob.

Slika 2.10

Pseudo kod:

1. Za svaki piksel unutar slike

2. Ako je za dati piksel vrednost crvene boje slična za 15% sa pikselima iz liste

željenih piksela,

3. I ako je vrednost plave boje slična za 15%

4. I ako je vrednost zelene boje slična za 15%

5. Onda ubaci ga u listu rezultata.

Svaka slika sadrži jedanaest zglobova oko kojih je region određene veličine. Algoritam

nalaženja željene tačke se izvršava nad svakim zglobom (jedanaest puta). Kako su svih

jedanaest zglobova nezavisni jedni od drugih posao nalaženja željene tačke ja podeljen u

odvojene niti. Za svaki nezavisni zglob se posmatra region piksela. Slike rezultata algoritma,

pre (Slika 2.11levo) i posle (Slika 2.11 desno).

Page 31: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

30

Slika 2.11

Čišćenje šuma sa slike

Sa slike se vidi da ima dosta šuma tj. piksela koji nisu u regionu veće gustine crnih piksela.

Dosta piksela koji su prošli test sličnosti boje zato što ih je sobno svetlo osvetlilo pod

pravim uglom ili ih je senka zamračila. Takvi šumovi mogu potencijalno da prave problem u

kodu kada bude trebalo da se nađe koji od tih piksela su zglobovi a koji ne. Još jedan prolaz

kroz matricu je neophodan kako bi se slika očistila od šumova.

To se postiglo tako što za svaki crni piksel (gde je tražena boja pronađena) uzme na proveru

ponovo. Gleda se da li se oko njega nalaze još crnih piksela, njegovih suseda.

Ako je broj crnih piksela oko njega dovoljno velik onda to znači da se nalazi u regionu veće

gustine i ostaje crn. Njegove susede pretvaramo u crne piksele. Tako se dobio efekat

da ako je piksel u gustom okruženju to okruženje postane gušće naseljeno. Ako je pak premali

broj crnih piksela koji ga okružuje pretpostavlja se da je taj piksel šum i uklanja

se (pretvara se u beli piksel).

Ovim se postigao efekat “rich get richer, poor get poorer” čime se slika očistila od šumova kao

i popunila rupe unutar gustih regiona.

Page 32: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

31

Pseudo kod:

1. Za svaki piksel iz liste piksela u kojima je izdvojena tražena boja

2. Proveri svih osam polja koja se nalaze oko piksela

3. Ako su manje od tri polja crne boje (tražene boje) onda izbaci taj piksel iz

liste traženih

Slike rezultata algoritma, pre (Slika 2.12 levo) i posle (Slika 2.12 desno).

Slika 2.12

Početne pozicije regiona zglobova

U profesionalnim okolnostima svaki snimak Motion Capture-a počinje tako što čovek napravi

„T-pose” tj. da stane kao slovo t, ispravljenih ruku (Slika 2.7). Na taj način kompjuter lako može

da odredi gde se koji deo zgloba nalazi. U programu iz projekta korisnik mora da klikne mišem

na delove videa gde se zglobovi nalaze. Kada se pokrene program prikazuje se prvi kadar

snimka gde su ruke čoveka raširene. Korisnik selektuje sve zglobove redom i program ih

sačuva kao početne pozicije (Slika 2.13).

Page 33: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

32

Slika 2.13

Pronalaženje centra regiona

Nakon što se region očisti od „neželjenih“ piksela (Slika 2.14 levo) ostaje da se nađe centar

dobijenog oblika. Centar se nalazi tako sto se pronalaze najduže horizontalne i vertikalne linije

unutar oblika. Pošto oblik može da varira iz kadra u kadar, umesto preseka ovih linija (Slika

2.14 crvene linije na slici), napravljen je pravougaonik od njih (Slika 2.14 crveni pravougaonik).

Centar tog pravougaonika se uzima kao finalna tačka pozicije zgloba (Slika 2.14 centar plavih

linija). Ovim su se umanjile nagle promene tražene tačke usled nepravilnosti oblika iz kadra u

kadar, i dobio se centar koji je stabilniji.

Slika 2.14

Page 34: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

33

Pseudo kod:

1. Za svaki red unutar regiona traženih boja

2. Proveravaj piksele od levo ka desno, dužinom reda

3. Pamti koji je najduži neprekidni niz piksela (sadrži samo tražene piksele)

4. Vratiti kao rezultat najduži neprekidni niz piksela od svih redova

5. Isto obaviti i po kolonama regiona.

6. Napraviti kvadrat

7. Širine maksimalnog niza piksela po redovima

8. Visine maksimalnog niza piksela po kolonama

9. Pozicije x ose od početnog piksela maksimalnog niza piksela po redovima

10. Pozicije y ose od početnog piksela maksimalnog niza piksela po kolonama

11. Naći centar tog kvadrata i vratiti ga kao pozicija traženog zgloba

Praćenje regiona

Da bi se algoritam znatno ubrzao za svaki zglob se nije prolazilo kroz celu sliku nego samo kroz

pod-matricu znatno manje veličine koja obuhvata traženi region. Svakog kadra slike se traženi

region pomera u određenom smeru. Pod-matrica koja se proverava za traženi region mora

isto da se pomera u pravcu regiona kako bi mogla da ga skenira i izvuče tačku iz njega.

Početne lokacije kvadrata regiona provere su zadati prema početnim pozicijama zglobova

koje je korisnik odredio na početku. Kada se kadar pomeri region provere se pomeri tako što

mu se centar pozicionira na mesto centra prethodnog traženog polja (Slika 2.15). Time se

obezbeđuje da region provere ne zaostaje za traženim regionom tj. uvek ga prati i tako

“štedi” vreme izvršavanja algoritma.

Slika 2.15

Page 35: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

34

2.4 Upotreba u igri

Dobijeni niz pozicija se čuva kao tekstualni fajl koji sadrži niz x i y koordinata. Unutar video

igre se taj niz čita i čuva u identičan niz pozicija zglobova. Figura unutar igre, umesto da ima

animaciju, gde se menjaju teksture iz niza, ima niz zglobova koji se po istom principu smenjuju.

Brzina animacije može da se naštimuje kako bi izgledala što prirodnije stvarnoj brzini figure

unutar video igre. Kao i animacije teksturama, svaka figura može imati više tipova animacije

zglobova koja zavisi od trenutnog stanja figure (Slika 2.16). Zavisno od brzine kretanja igrač

može da ima animaciju šetanja ili trčanja (Slika 2.17), ili, ako je u klubu, može da se aktivira

animacija igranja.

Slika 2.16

Slika 2.17

Page 36: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

35

3. Rukovođenje resursima

3.1 Učitavanje tekstura

Na početku pokretanja video igre sve teksture koje se koriste su učitane u radnu memoriju.

Teksture se, kao i ostali resursi, učitavaju iz GameContent projekta. Teksture su, unutar

projekta, grupisane po folderima. Unutar glavnog foldera se nalaze folderi koji predstavljaju

kategorije kojoj svaka tekstura pripada. Oružje je smešteno u Weapons folder, kao što su i sve

građevine unutar Buildings foldera. Na početku izrade igre nije bila potreba za ovakvo

kategorisanje tekstura kao i resursa generalno, ali se porastom projekta broj povećao i bilo je

otežano pregledanje svih tekstura. Unutar svakog foldera kategorije se nalaze folderi sa

imenom teksture. Tekstura pištolja se nalazi unutar Gun foldera. Unutar igre se teksture

pozivaju upravo po ovim imenima foldera (Slika 3.1).

Unutar foldera teksture se nalaze folderi stanja teksture. Standardno stanje bilo koje teksture

jen Idle. Ukoliko ima neko posebno stanje, recimo, stanje eksplozije, onda postoji folder sa

imenom tog stanja. Zavisno od stanja objekta će se koristiti tekstura iz određenog foldera

stanja.

Unutar svakog foldera stanja su teksture, u png formatu. Teksture su imenovane numerički,

počevši od nule. Ovakvim sistemom imenovanja se omogućava prepoznavanje redosleda

animiranja teksture.

Slika 3.1

Page 37: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

36

3.2 Učitavanje mape

Posle učitavanja svih potrebnih tekstura, treba da se naprave objekti u igri koji će da poprime

te teksture. Svaki objekat u igri ima niz osobina koje treba da ima kako bi postojao u igri, bilo

da je tepih, drvo ili čovek. Pored osobina za svaki objekat u igri, potrebno je odrediti mu i

početnu poziciju unutar mape igre.

Sve osobine koje su potrebne za pravljenje objekata na mapi se nalaze unutar Properties

klase.

public string type; public string Name { get; set; } public int position_x; public int position_y; public string texture_type; public int Energy { get; set; } public float Speed { get; set; } public int width; public int height; public string AmmoType; public float Force { get; set; } public int ClipSize { get; set; } public float timerShoot; public float Weight { get; set; } public int holding_spot_x; public int holding_spot_y; public float gravity_factor; public bool flat; public bool see_tru; public bool rapid_fire; public string bulletMarkTexture; public int bulletMarkWidth; public int bulletMarkHeigth;

Properties klasa se serijalizuje i deserijalizuje pomoću JSONA. Json je izabran zato što je

mnogo čitljiviji i manje memorije zauzima od standardnog XML formata serijalizacije.

public static Properties initialize(string path){ string all = File.ReadAllText(path);

return JsonConvert.DeserializeObject<Properties>(all); }

Page 38: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

37

Jednu mapu sačinjavaju svi objekti, sa svojim json tekstualnim fajlovima. Kako bi folder mape

bio preglednije, json fajlovi su grupisani po folderima kategorije.

Posle učitavanja tekstura i ostalih resursa se učitavaju svi tekstualni json fajlovi. Zavisno od

osobine tipa objekta, pravi se specifičan objekta. Konstruktoru svakog objekta je potrebno

proslediti Properties objekat koji će inicijalizovati potrebne komponente tog objekta.

public Person(Properties properties): base(properties) { Health = properties.Energy; StartWeight = properties.Weight; Weight = properties.Weight; Speed = properties.Speed * 2; MapMain.PersonList.Add(this); Height = 178; Width = 70; }

Može postojati veći broj mapa za igru, gde su u svakoj mapi drugačije grupisani objekti, ili

imaju drugačije osobine kao i proporcije. Ovo opet daje slobodu igračima da menjaju sve

komponente, zato što su im dostupne u lako čitljivom obliku. Ako igrač misli da treba mitraljez

da bude jači unutar igre, slobodno može da otvori njegovu konfiguraciju u Notepad programu

i izmeni je (Slika 3.2).

Slika 3.2

Page 39: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

38

4. Struktura igre

4.1 Glavni ciklus igre

Objašnjeno je kakav je ciklus igre unutar XNA okruženja, ispod je prikazano kako je ovaj ciklus

iskorišćen za video igru konkretno ovog projekta:

Load metoda:

protected override void LoadContent() { SpriteBatch = new SpriteBatch(GraphicsDevice); AudioCenter.Instance.Load(); TextureCenter.Instance.Load(); AnimationCenter.Instance.load(); GUI.GUI.Instance.load(); MapMain.Instance.Load(); PlayerControls.Instance.Load(); Paint.Paint.Instance.Load(); Inspect.Main.Instance.load(); HUD.Main.Load(); }

Update metoda:

protected override void Update(GameTime gameTime) { Testing.FrameRate.Update(); Controls.Instance.GameControlls(); VibrationCenter.Instance.update(); MapMain.Instance.Update(); PlayerControls.Instance.Update(); Paint.Paint.Instance.Update(); ExplosionCenter.Instance.Update(); Inspect.Main.Instance.update(); base.Update(gameTime); }

Draw metoda:

protected override void Draw(GameTime gameTime) { Graphics.GraphicsDevice.Clear(Color.White);

Instance.SpriteBatch.Begin( SpriteSortMode.Immediate,BlendState.NonPremultiplied,null,null,null,null, Camera.Camera2D.GetTransformation());

MapMain.Instance.Draw(); Instance.SpriteBatch.End(); base.Draw(gameTime); }

Page 40: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

39

4.2 Objekti unutar video igre

U osnovi svakog objekta koji je prikazan unutar video igre je klasa Bitak. Bitak je sve ono

što jeste tj. što postoji u igri. Svaki objekat u video igri ima ime. Ime ne mora da bude unikatno,

više objekata može da imaju isto ime, kao recimo drveće, nije bitno koje je svako pojedinačno

drvo, bitno je samo da je drvo, dok je bitnije koji lik je Žorž a koji Nemanja unutar igre.

Svaki objekat ima svoj unikatni identifikator, ID, koji se dodeljuje prilikom kreacije objekta.

Ovim identifikatorom se, unutar koda, prepoznaju konkretni objekti.

Type je polje u kome se čuva vrednost koji je tip objekta unutar igre. Ovim se na jednostavan

način može odrediti da li je objekat oružje ili građevina.

U svakom objektu se čuva njegova originalna lokacija fajla iz koga je učitan. Ova vrednost se

koristi u svrhe ponovnog učitavanja objekata, po potrebi (prilikom restartovanja igre).

Properties objekat nosi sve ostale podatke specifične za objekat, ona se pravi iz učitanog

tekst fajla objekta i iz nje se izvlače svi ostali podaci i osobine jednog objekta. On se prosleđuje

kroz konstruktore objekata i čuva konačno unutar osnove objekta, kako bi ti podaci bili

dostupni za laku upotrebu.

Svaki Bitak objekat ima roditeljsku klasu Animatable, što znaci da se svaki objekat unutar

igre može animirati, pod uslovom da ima animaciju. Ukoliko nema animacije prisutne, objekat

samo koristi početnu statičnu teksturu i nalazi se u prvobitnom stanju čekanja (Idle).

Klasa animacije sadrži trenutno stanje animacije kao i merač koraka animacije. Ona pristupa

traženim teksturama iz liste već učitanih tekstura po tipu animacije i vremenu.

Za Animatable klasu je roditeljska klasa Drawable. Ova klasa sadrži podatke o teksturi kao

i o ostalim podacima vezanim za samo iscrtavanje figure na ekran: transparentnost objekta,

centar teksture, odnos visine i dužine, kao i u kom redosledu da se iscrta tekstura. Informaciju

o redosledu iscrtavanja tekstura dobija u odnosu na njenu najnižu tačku na ekranu po y osi.

Svi objekti koji su unutar sveta video igre su klase Bitak. Stvari kao UI elementi ili neke

pomoćne klase za vizuelni prikaz ne spadaju pod Bitak kategoriju nego se inicijalizuju i

rukovode u posebnim klasama.

Page 41: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

40

Objekti koji se mogu kreirati unutar video igre:

AmmoPack

Objekat pakovanja municije (Slika 4.1). Svako pakovanje municije sadrži određenu količinu

metaka unutar sebe. Svako pakovanje municije ima određen tip municije koja se nalazi u

pakovanju. Pri kreiranju pakovanja municije kreira se i potreban broj municije kako bi se

pakovanje napunilo.

Ako igrač ima oružje u ruci i pređe preko pakovanja municije, ako je municija odgovarajuća sa

tipom municije oružja, onda se automatski pokupiti i napuni.

Slika 4.1

Barrel

Bure se razlikuje od običnog objekta Bitka po tome što kada izgubi svu energiju, eksplodira

(Slika 4.2). Eksplozija se poziva iz klase koja rukovodi svim eksplozijama u video igri,

ExplosionCeneter. Zada se pozicija na kojoj treba da se desi eksplozija i otpočne animacija.

Posle eksplozije bure nestaje.

Slika 4.2

Page 42: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

41

Box

Igrač može da uđe u kutiju (Slika 4.3). Kada je u kutiji onda ga ostali likovi u igri ne primećuju.

Zavisno od teksture, objekat kutije može biti bilo koji objekat ispod kog igrač može da se uvuče

i da se pokreće, kao npr. korpa ili žbun.

Slika 4.3

Building

Građevine su jedini objekti unutar igre koji imaju vise od jednog sloja teksture. Prvi sloj

građevine je njen temelj. Drugi sloj je fasada (Slika 4.4).

Slika 4.4

Page 43: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

42

Kako je logika za iscrtavanje napravljena tako da se samo jedna tekstura iscrtava unutar Draw

metode, dodata je još jedna Draw metoda koja iscrtava i fasadu kuće. Fasade se smeštaju u

posebnu listu koja se iscrtava tek posle iscrtavanja temelja kuce. Igrač treba uvek da prvo vidi

fasadu kuće.

Kada igrač uđe unutar građevine, fasada postane transparentna. Ovako igrač može da

istražuje unutrašnjost građevine. Po istom principu funkcionišu i prostorije koje su unutar

građevine, nakon ulaska prednja strana zida postane providna (Slika 4.5).

Slika 4.5

Bullet

Svako pakovanje sa municijom je ispunjeno metkovima (Slika 4.6). Kada se sa oružjem metkovi

određenog tipa pokupe, oni se nalaze unutar tog oružja. Prilikom ispaljivanja metka iz oružja,

metak leti u smeru iz koga je ispaljen, dok se ne sudaru sa bilo kojim objektom. Kada dođe do

sudara, ako je objekat oštetljiv, objekat se ošteti. Ako metak leti određeno vreme bez da je

pogodio bilo šta onda prestaje da leti i pada na zemlju, ostavljajući trag gde je pao.

Slika 4.6

Page 44: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

43

Gun

Oružje sadrži informaciju o tipu metkova koje može da prihvati, kao i koju količinu metkova

može da nosi u sebi. Kada oružje puca stvara se plamen oko otvora, pri izlasku metka, pokrene

se zvuk efekta pucnja i džojstik zavibrira.

Oružje prati smer u kome je igrač okrenut, tako da kada ispali metak daje metku tu informaciju

kako bi se uskladili pravci pucanja metkova.

Slika 4.7

Item

Svaki objekat sa kojim može igrač da interaguje nasleđuje Item klasu. Kada je neki objekat

Item onda igrač može da ga pokupi i drži u ruci (Slika 4.8). Igrač može da koristi Item objekat

u zavisnosti od toga koji je Item. Svaki Item objekat se isto može i ispustiti ponovno na

zemlju, kako bi se oslobodila ruka igraču za druge objekte.

Kako bi igrač podigao objekat, mora da se nalazi u neposrednoj blizini objekta. Ako postoje

više objekata koji su u blizini igrača, on pokupi najbliži njemu.

Slika 4.8

Page 45: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

44

Stuff

Objekti napravljeni u ovoj kategoriji su raznovrsnog karaktera. Među njima spadaju svi objekti

sa kojima igrač nema mogućnost interakcije. Ovo su objekti kao tepih, kanta, knjiga, sto,

stolice, slika na zidu i svi ostali „ukrasni“ predmeti (Slika 4.9). Ovi predmeti sluze da doprinesu

atmosferi, kako bi lokacije koje igrač istražuje imale osećaj da neko u njima živi.

Slika 4.9

Terrain

Ova klasa je napravljena kako bi se u njoj grupisali objekti koji sačinjavaju teren mape. Teren

sačinjavaju sve površine po kojima igrač šeta, putevi, trava, zemlja itd. (Slika 4.10) . Jedina

specifičnost ovih objekata je ta da im je iscrtavanja prebačeno na sam početak liste

iscrtavanja, kako bi uvek bili iza svih ostalih objekata.

Slika 4.10

Page 46: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

45

5. Funkcionalnosti video igre

5.2 Interakcija sa objektima

Unutar igre, igrač može, osim da se pokreće, da interaguje sa objektima oko sebe. Objekti koji

nisu previše veliki igrač može da uzme u ruku i da ih pomera i premešta im položaj. Ako je u

pitanju oružje, igrač može da puca iz njega. Ako pogodi drugog igrača, ovaj umire. Ako pogodi

bure, ono eksplodira (Slika 5.1).

Slika 5.1

Igrač može da uhvati drugog igrača. Kada ga uhvati onda može da ga dovuče gde želi. Igrač

koji drži drugog lika mora da konstanto drži taster držanja kako ne bi pustio drugog lika.

Igrač ima mogućnost da uveliča mapu u kojoj igra, da zumira kamerom, kako bi mogao da vidi

više detalja unutar prostora (Slika 5.2). Još jedan način da igrač bolje prouči objekat je da ga

uhvati u ruku i aktivira stanje inspekcije.

Slika 5.2

Page 47: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

46

5.3 Stanje inspekcije

Kada igrač, sa objektom u ruci, klikne dugme za inspekciju, ulazi u stanje inspekcije. U ovom

stanju igrač ne može da se pokreće zato što proučava objekat. Objekat koji je držao u ruci je

sada uveličan i zauzima sredinu ekrana (Slika 5.3).

Slika 5.3

Igrač sada može da proučava objekat sa više detalja. Pomeranjem palica na džojstiku se

pokazuje igračev inventar stvari koje može da koristi nad objektom (Slika 5.4).

Slika 5.4

Page 48: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

47

Ako izabere beležnik u jednoj ruci i olovku u drugoj, može da zabeleži određene informacije

koje je uočio na objektu. Zapisan sadržaj ostaje sačuvan u beležnici, tako da može kasnije da

prelista beležnicu i nađe svoje beleške (Slika 5.5).

Slika 5.5

Igrač ima i lupu na raspolaganju za pregledanje objekta. Sa lupom može da vidi dodatno

uveličane delove objekta. Sa lupom igrač može da vidi otiske prstiju na objektu (Slika 5.6). Kada

bilo koji drugi lik unutar igre pokupi objekat on ostavlja otisak prsta na tom objektu. Pomoću

inspekcije objekata igrač može da dobije informacije o otiscima prstiju, koje može da zapiše u

beležnicu.

Slika 5.6

Page 49: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

48

5.4 Ponašanje likova unutar igre

Ponašanje ostalih likova u igri, koji nisu glavni igrač, je upravljano posebnim metodama.

Standardno ponašanje likova je da samo stoje na mestu i ništa ne rade. Liku ponašanje zavisi

od tipa podklase osnovnog ponašanja. Za sada postoji samo ponašanje napadača.

Napadač ima jedan glavni cilj, a to je da napadne glavnog igraća. Dok ne vidi igrača napadač

stoji. Čim vidi igraća on kreće da ide za njim i da ga napada. Ukoliko napadač nema oružje sa

kojim bi napao, on prvo traži oružje. Kada se istroši municija oružju, napadač traži municiju

kako bi mogao da nastavi da prati igrača. Ako uspe da ubije igrača onda mu prestaje ciklus

napadanja, u suprotnom se nastavlja, dok ima oružja i municije.

Ovakvo ponašanje je prilično jednostavnog karaktera ali dovodi do velikog broja različitih

ishoda, zavisno od lokacija napadača i igrača, kao i od ostalih predmeta sa kojima mogu da

interaguju.

Ovakva ponašanja su samo niz provera stanja likova i biranje koja radnja sledeće da se obavi.

Ako je broj municije jednak nuli unutar oružja onda je ispunjen uslov da se liku pošalje naredba

da ide i traži municiju. Kada je pokupi, lik se oslobađa te naredbe i opet se gleda koja sledeća

naredba da se izvrši.

public override void Update(){ if(!IsDead()) { var visibleEnemy = new SortedList<int, Bitak>(); foreach(var bitak in Map.MapMain.BitakList){ var tt = false; if(bitak.name != null){ tt = bitak.name.CompareTo(m_enemyToFind) == 0; }

if(Vector2.Distance(Center, bitak.Center) <= sight_radius && VisibleSearchItems != null && tt){

visibleEnemy.Add((int)Vector2.Distance(Center, bitak.Center), bitak);

} } if(visibleEnemy.Count > 0){ GetWeapon(); GetAmmo(); if(Gun != null && Gun.Ammo.Count > 0 && PickedUpItem is Gun){ KillEnemy(); } } } }

Kako ne bi došlo do čudnih rezultata i ukrštanja naredbi, svaka naredba ima početka i kraj.

Početak je ispunjenje uslova da se pokrene naredba dok je kraj definisan kada se uslov ispuni.

Za svaku naredbu postoje pod naredbe koje se moraju izvršiti, kao što je pomeranje lika do

određene pozicije ili zahtevanje od lika da izvrši naredbu uzimanja objekta.

Page 50: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

49

6. Pomoćni alati za rad

6.1 2D Motion Capture aplikacija

Aplikacija za prepoznavanje pokreta sa video snimka kao i njegovu obradu je odrađena kao

odvojena aplikacija od ostatka igre. Kada se završi izvlačenje pozicija zglobova iz aplikacije ti

fajlovi se prekopiraju unutar projekta video igre i može se koristiti za animaciju figura.

Kontrole koje su korišćene za rad sa rezultujućim pozicijama figure (Slika 6.1) :

Slika 6.1

Page 51: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

50

1. Prikazivanje figure izvan slike video snimka, kako bi korisnik imao uvid kako bi izgledala

animacija u video igri.

2. Slajder animacije. Pomeranjem ovog slajdera korisnik upravlja animacijom figure.

Dostupne su animacije koje su u tom trenutku konvertovane. Ovom kontrolom

korisnik može da pregleda određene delove animacije u varirajućim brzinama

(brzinom kojom pomera slajder mišem).

3. Slajder za označavanje početka animacije. Ukoliko je deo video klipa dovoljno dugačak,

korisnik može da izdvoji željenu celinu tako što će odrediti početak kao i kraj puštanja

animacije.

4. Slajder za obeležavanje završetka segmenta animacije. Ovim slajderima se može i

izdvojiti deo pokreta animacije koji zatvara “loop”, kako bi se, prilikom ponavljana

animacije, stekao utisak kontinualnog pokreta.

5. „Auto-play“ aktivira izvršavanje animacije. Animacija u WinForms-u je postignuta

pozivanjem tajmera i, kada tajmer obavi ciklus, promenu pozicija zglobova na sledeću

poziciju.

Kada se animacija završi, počinje opet ispočetka. Na „reverse“ kontrolu se animacija

pokreće unazad a na loop animacija ide unapred pa , kad stigne kraj, unazad. „Loop“

efektom korisnik ne mora da pogodi tačne trenutke kada se na video klipu napravi

krug, nego može da ga “veštački” izazove.

6. Pomeranjem vertikalnog slajdera korisnik može da ubrza ili uspori animaciju figure.

7. Korisnik može da uključi ili isključi prikaz glave figure, kako bi stekao bolju predstavu

pokreta glave unutar video igre.

Page 52: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

51

6.2 Editor mape

Kako se celokupni sadržaj mape video igre učitava iz tekstualnih json fajlova, za promenu

nekog objekta je dovoljno da se promeniti njegov json fajl. Problem nastaje zato što je

menjanje json fajlova veoma ne intuitivan posao. Ako korisnik želi da se tepih u kuci nalazi

malo udesno od kauča, on mora da otvara tekstualni fajl i da proceni koliko bi to bilo piksela

za pomeriti.

Da bi se zaobišao ovakav proces i napravilo okruženje koje je udobnije za rad, ubačena je

kontrola editovanja mape u projekat. Kada je igra već pokrenuta, korisnik može da klikne

taster za otvaranje editora mape. Dok je editor mape otvoren igra i dalje traje, nesmetano.

Igra se može po potrebi i pauzirati kada se krene u promenu mape.

Kontrola za editovanje mape ima razna dugmad za manipulaciju igre. Pri otvaranju editora

mape se pojavljuje kursor miša unutar video igre. Kada korisnik klikne sa kursorom na bilo koji

predmet, predmet se prikazuje u editoru i učitavaju se sve osobine selektovanog objekta.

Korisnik može da, koristeći drag and drop komande, pomera sve objekte unutar mape. Kada

završi sa izmenama pozicije objekta kao i ostalim specifikacijama, treba da se pritisne na

„Save“ dugme kako bi se promena sačuvala unutar mape (Slika 6.2 – MapEditor sa podacima

kutije kao i selektovana kutija na mapi). Kada sledeći put mapa bude učitana, promene će biti

prisutne.

Ovim načinom se vreme izmena unutar mape znatno skratilo, a intuitivni korisnički interfejs

olakšava posao korisnicima koji žele da naprave sopstvene mape za igranje.

Slika 6.2

Page 53: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

52

6.3 Učitavanje slika

Pomoću editora mape korisnik može da menja već postojeći sadržaj unutar video igre. Ako

želi da napravi novi sadržaj koji će da ubaci u igru mora da importuje sliku koja sadrži teksturu

novog objekta (Slika 6.3).

Slika 6.3

Slika treba da se preuredi tako da joj pozadina bude transparentna i da joj veličina bude

minimalna, tj. da nema praznog prostora koji izlazi izvan granica samog predmeta slike (Slika

6.4).

Slika 6.4

Page 54: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

53

Ako slika sadrži vise odvojenih predmeta koji treba da budu pojedinačno izdvojeni onda dolazi

do vremenskog problema. Unutar bilo kog editora za slike je potrebno da se izvrše par koraka

kako bi se uklonila pozadina slike, kao i odradila auto-crop funkcionalnost i time izbacili prazni

delovi. Ovaj proces se odužava kada se dobije slika od pet-šest odvojenih elemenata.

Da bi se skratilo vreme odvajanja i formatiranja slika, unutar editora mape se može učitati

slika, i automatski će biti sređena po zahtevanim uslovima. Ovako odvojene i prerađene slike

se čuvaju unutar MapEditor content foldera unutar projekta video igre. Odvojene slike se

mogu odmah ubaciti u igru i sačuvati unutar mape (Slika 6.5).

Slika 6.5

Ovakvim alatima se ne samo olakšava proces modifikacije i stvaranja novog sadržaja za igru

nego se i podstiče česta promena i isprobavanje raznih kombinacije preuređenja objekata,

kako kreatoru igre tako i korisnicima koji žele da naprave sopstvenu viziju igre.

Page 55: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

54

7. Zaključak

Ovim radom je dobijen bolji utisak o svim različitim aspektima izrade jedne video igre. Iako je

igra dvodimenzionalna i nije visoke produkcije i dalje zahteva dosta planiranja kao i

odlučivanja o svim detaljima koji nemaju direktnu vezu sa samom igrom, kao što su strukture

foldera, komunikacije delova aplikacije i ostale tehnikalije koje su neophodne za rad bilo koje

aplikacije.

Iako je glavna celina projekta izrada video igre videli smo da su pod-projekti zauzeli veliki deo

ukupnog rada. Njima se postiglo ubrzanje samog ciklusa produkcije video igre. 2D Motion

Capture alat je doprineo znatno bržoj produkciji animacija kao i mogućnosti mnogo više vrsta

animacija i poza za karaktere unutar video igre.

Za dodatnu organizaciju su korišćeni alati za verzionisanje projekta kao što su Git i Team

Foundation Services. Sve nađene greške u igri su organizovane kao „bug items“ i sve

funkcionalnosti koje su u planu su svrstane pod „work items“. Ovim je svaki aspekat rada

praćen i organizovan, kako bi se postigla što veća produktivnost.

Za dalji rad na igri je predviđeno dalje razvijanje mogućnosti interakcija među likovima i među

objektima u svetu video igre. Testiranja trenutnih kontrola i poboljšanja kvaliteta i jasnoće

rukovanja video igrom. Glavna funkcionalnost za doradu na video igri jeste pravljenje

složenijih skripti za veštačku inteligenciju drugih likova unutar video igre, kako bi se postigao

osećaj da je svet verodostojniji.

Na kraju celokupne produkcije ostaje samo još najbitnija stavka svake igre, da se podeli s

ljudima, da mogu da se igraju.

Page 56: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

55

8. Literatura

[1] Ricardo Tobon, The Mocap Book: A Practical Guide to the Art of Motion Capture, Foris Force, 2010

[2] Alberto Menache, Understanding Motion Capture for Computer Animation, Second Edition

(Morgan Kaufmann Series in Computer Graphics), Morgan Kaufmann, 2010

[3] Midori Kitagawa, MoCap for Artists: Workflow and Techniques for Motion Capture, Focal Press,

2008

[4] Matt Liverman, The Animator's Motion Capture Guide: Organizing, Managing, Editing (Charles

River Media Game Development), Charles River Media, 2004

[5] Thomas Moeslund, Human Motion Capture using Computer Vision: A Pruning-based Approach,

LAP LAMBERT Academic Publishing, 2010

[6] Alan Cooper, The Inmates Are Running the Asylum: Why High-Tech Products Drive Us Crazy and

How to Restore the Sanity, Sams - Pearson Education; 1 edition (March 5, 2004)

[7] Luka Lovre, 2D Motion Capture, Prirodno-matematički fakultet Niš (2016)

[8] Kurt Jaegers, XNA 4.0 Game Development by Example: Beginners Guide, Packt Publishing

(September 24, 2010)

[9] Aaron Reed, Learning XNA 4.0: Game Development for the PC, Xbox 360, and Windows

Phone 7, O'Reilly Media; 1 edition (December 30, 2010)

[10] John Sedlak, Building XNA 2.0 Games: A Practical Guide for Independent Game

Development (Books for Professionals by Professionals), Apress; 1st ed. edition (September

24, 2008)

[11] Chad Carter, Microsoft XNA Game Studio 3.0 Unleashed, Sams Publishing; 1 edition

(March 7, 2009)

Page 57: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

Прилог 5/1

ПРИРОДНO - MАТЕМАТИЧКИ ФАКУЛТЕТ

НИШ

КЉУЧНА ДОКУМЕНТАЦИЈСКА ИНФОРМАЦИЈА

Редни број, РБР:

Идентификациони број, ИБР:

Тип документације, ТД: монографска

Тип записа, ТЗ: текстуални / графички

Врста рада, ВР: мастер рад

Аутор, АУ: Лука Ловре

Ментор, МН

:

Марко Петковић

Наслов рада, НР: 2D видео игра у XNA окружењу

Језик публикације, ЈП: српски

Језик извода, ЈИ: енглески

Земља публиковања, ЗП: Р. Србија

Уже географско подручје, УГП: Р. Србија

Година, ГО: 2017.

Издавач, ИЗ: ауторски репринт

Место и адреса, МА: Ниш, Вишеградска 33.

Физички опис рада, ФО: (поглавља/страна/ цитата/табела/слика/графика/прилога)

55 стр. ; граф. прикази

Научна област, НО: рачунарске науке

Научна дисциплина, НД: развој видео игара

Предметна одредница/Кључне речи, ПО: XNA, развој 2D видео игара

УДК 005.311.7 519.83 004.4’275

Чува се, ЧУ: библиотека

Важна напомена, ВН:

Извод, ИЗ: Рад обухвата употребу XNA окружења за израду 2D видео игара. Поред основних метода прављена видео игара обухваћено је планирање као и додатне технике за оптимизовање продукције видео игре. Додатни алати за израду видео игре: Алат за праћење покрета са видео снимка (2D Motion Capture); MapEditor алат за манипулацију објектима унутар видео игре; Алат за прераду слика и конвертовање у текстуре за употребу у видео игри;

Датум прихватања теме, ДП:

Датум одбране, ДО:

Чланови комисије, КО: Председник:

Члан:

Члан, ментор:

Образац Q4.09.13 - Издање 1

Page 58: UNIVERZITET U NIŠUunarske... · se sve mora „pešaka“ odraditi. S druge strane, XNA okruženje nije kompleksno za početnike i samim tim što ne daje previše funkcionalnosti

Прилог 5/2

ПРИРОДНО - МАТЕМАТИЧКИ ФАКУЛТЕТ

НИШ

KEY WORDS DOCUMENTATION

Accession number, ANO:

Identification number, INO:

Document type, DT: monograph

Type of record, TR: textual / graphic

Contents code, CC: university degree thesis (master thesis)

Author, AU: Luka Lovre

Mentor, MN: Marko Petković

Title, TI: 2D video game with XNA framework

Language of text, LT: Serbian

Language of abstract, LA: English

Country of publication, CP: Republic of Serbia

Locality of publication, LP: Serbia

Publication year, PY: 2017

Publisher, PB: author’s reprint

Publication place, PP: Niš, Višegradska 33.

Physical description, PD: (chapters/pages/ref./tables/pictures/graphs/appendixes)

55 p. ; graphic representations

Scientific field, SF: Computer science

Scientific discipline, SD: Game development

Subject/Key words, S/KW: XNA, 2D game development

UC 005.311.7

519.83

004.4’275

Holding data, HD: library

Note, N:

Abstract, AB: This thesis contains the use of the XNA framework for 2D game development. Beside the basic methods for making video games the work contains methods of planning as well as techniques for optimizing the video game production. Additional tools for making of the game: 2D Motion capture tools; Map editors for manipulation of objects in-game; Video converter tool for making textures;

Accepted by the Scientific Board on, ASB:

Defended on, DE:

Defended Board, DB: President:

Member:

Member, Mentor:

Образац Q4.09.13 - Издање 1