• Apgrejdovali smo forum na XenForo 2.1.1, ukoliko imate predloga vezanih za izgled ili funkcionalnost foruma, ili ukoliko naletite na neki problem, javite nam OVDE

    DEFINISALI SMO PRAVILA FORUMA. Pročitajte ih, pojaviće se automatski kada krenete da čitate nešto!

XNA Programiranje Igara | Tutorijal #09 | Prva Igra u MonoGame-u

Uni

PCAXE Addicted
Učlanjen(a)
31.08.2018.
Poruka
2.469
Rezultat reagovanja
984
Moja konfiguracija
PC / Laptop Name:
Lenovo ThinkPad X250 - i5 5300U/8GB/256GB EVO 860/6 Cell
Mice & keyboard:
Bloody V7M & Stock Thinkpad X250 Keyboard
OS & Browser:
Windows 10 + Microsoft Edge | ArcoLinux + i3 + Mozilla Firefox Quantum
Molba : Ako iko od moderatora ovo bude čitao, značilo bi mi puno ako bi postojala sekcija programiranje unutar podforuma Softver, kao i premeštanje tema sa tagom #xna-gwid u isti. Unapred hvala! :)

Pre svega, kao i uvek, apelujem na vas da, ukoliko ste propustili iti jedan tutorijal iz serije ovih, iščitate dotične, pošto se svi nadovezuju jedni na druge. Ovo možete učiniti unosom "#xna-gwid" bez navodnika u polje foruma "Pretraga...". :)

Šta ćemo danas obraditi?
Ovaj tutorijal je zvaničan uvod u pravo programiranje igara, nakon koga ćete steći znanje o kreiranju MonoGame igara kao i kako funkcionišu neki delovi samog okruženja. Ako ste spremni, 'ajde da počnemo!

Instalacija MonoGame-a
Već smo u prethodnom tutorijalu razjasnili da iako koristimo XNA kod, ne koristimo XNA okruženje, već moderniju verziju istog kompatibilnu sa svim popularnim platformama, reč je o MonoGame-u. Standardna instalacija Visual Studio alata neće doći sa MonoGame-om, pa ga moramo manuelno instalirati.
  • Prvi korak pri instalaciji jeste poseta MonoGame web sajta.
  • Zatim u navigacionom baru na vrhu pritisnimo dugme "Downloads"
  • Odaberemo poslednju verziju MonoGame-a (u ovom slučaju 3.7.1) što će nas preusmeriti do posta sa linkovima za preuzimanje
  • Odaberimo MonoGame 3.7.1 for VisualStudio
  • Kada je fajl preuzet, pokrenemo "MonoGameSetup.exe"
  • U prozoru koji se pojavi biramo "Next", zatim "I Agree"
  • Označimo polje sa verzijom Visual Studia koji imamo (u ovom slučaju Visual Studio 2017 Template)
  • Pritisnemo "Install"
  • Kada je instalacija završena, pritisnemo "Finish"
Korišćenje MonoGame-a
Kada je instalaciaj MonoGame-a završena, imaćemo dve nove stvari instalirane na našem sistemu. Tačnije imamo MonoGame Pipeline, o kome ćemo videti više kasnije i pojaviće se meni MonoGame u skupu Visual Studio šablona. Ovi šabloni obuhvataju više različitih platformi, pa u zavisnosti od platforme za koju kreiramo biramo "Android", "iOS", "XBox" itd.

Kreiranje Aplikacija
Ako se sećate kako smo kreirali Console Aplikacije, isti princip važi i za MonoGame. Ako se ipak ne sećate, pratite sledeće :
  • Pokrenemo Visual Studio
  • Odaberemo File --> New --> Project
  • U levom panelu biramo C# --> MonoGame
  • Odaberemo šablon koji koristimo, za potrebe ovog tutorijala MonoGame Windows Project
  • U polju Name imenujemo naš projekat
  • U polju Location navedemo lokaciju za smeštanje fajlova
  • Polje Solution ne diramo
Izmena koda
MonoGame aplikacije su dosta kompleksnije od prostih Console aplikacija. Zbog ovoga nam Visual Studio nudi da menjamo zasebne fajlove, pa umesto učitavanja izvornog koda vidimo samo prazan prostor. Da bismo izmenili izvorni kod (telo igre) moramo u Solution Explorer panelu odabrati fajl "Game1.cs", kao što je prikazano na slici ispod.
Untitled-1.png

Izvorni Kod
Izvorni kod naše igre smešten je u prethodnom fajlu i primetićete mnogo nepoznatih reči. Mnoge od ovih ne bi trebale da vas zanimaju jer su one automatski generisane samo radi potreba pokretanja igre. Da ne bismo odmah skakali na teži deo, primetićete gomilu zelenih reči, ovo su takozvani komentari. Pošto nismo ranije imali prilike da se susretnemo sa njima evo i jednostavnog objašnjenja :
  1. Postoje tri vrste komentara : jednoredni, višeredni i dokumentacioni
  2. Komentari ne utiču na rad programa već nam pomažu da razumemo naš kod ili da ga opišemo drugom programeru
  3. Jednoredni komentari se zapisuju navodeću // pa zatim reči i mogu zauzimati samo jedan red
  4. Višeredni komentari počinju /* i traju sve do kombinacije znakova */
  5. Dokumentacioni komentari omogućuju kompajleru da kreira fajl koji opisuje svaki deo programa van izvornog koda, a zapisuju se u jednom redu započeti /// i za nas trenutno imaju najmanju funkciju
Sada ćemo razumeti neke delove našeg automatski generisanog koda.

U liniji 12 vidimo deklaraciju objekta graphics, tipa GraphicsDeviceManager (GraphicsDeviceManager graphics;). Ovo je objekat izvedenog tipa GraphicsDeviceManager koji nama kao programeru omogućava pristup komponenti koja je zaslužna za prikazivanje grafike, tj. ekranu. On se ponaša kao most između naše igre i grafičke karte.

U liniji 13 vidimo deklaraciju objekta spriteBatch, tipa SpriteBatch (SpriteBatch spriteBatch;). Ovo je glavni objekat koji ćemo koristiti za crtanje grafike na ekranu, tj. crtanje sprajtova. Sprajt (eng. sprite) je pojam koji se u računarskoj grafici koristi za definisanje dvodimenzionalnog ili trodimenzionalnog grafičkog objekta koji je integrisan u veću scenu. 2D igre se sastoje iz više sprajtova u sceni, poput sprajta igrača, protivnika, oružja, virtuelnih valuta itd.

Metoda Initialize se koristi za inicijalizaciju svih objekata koji su u vezi sa klasom Game1. Nakon izvršavanja ove metode naš GraphicsDeviceManager će biti inicijalizovan, kao i bilo koji drugi objekat koji koristimo u igri poput rezultata.

LoadContent metoda se koristi za učitavanje svih elemenata igre, kao što su audio datoteke ili grafika. Kao i sa prethodnom metodom, pošto naša igra ne radi ništa spektakularno nema mnogo koda unutar.

Nakon metode LoadContent, aplikacija ulazi u takozvanu "petlju igre". Ovaj aspekt razlikuje običnu aplikaciju od video igre, bila to XNA igra ili neka druga. Pojednostavljeno, petlja igre se sastoji iz metoda koje se ponavljaju konstantno iznova i iznova dokle god se ne završi instanca igre. U XNA-u se petlja sastoji iz Update i Draw metoda. Draw metoda je uobičajeno korišćena za crtanje stvari. Trebalo bi da se trudite da je koristitie što manje moguće, tačnije samo za crtanje. Sve ostalo potrebno za nesmetano funkcionisanje igre treba da se odigrava u Update() metodi.

Sada, pokrenimo našu aplikaciju da vidimo šta se dobija kao rezultat ovoliko koda. Razočarani ste, zar ne? Vidimo samo jednu svetlo plavu pozadinu koja ne utiče mnogo na naš rad, ali nemojte da brinete, ovo je samo urađeno zbog inicijalizacije igre a mi ćemo raditi zanimljivije stvari :)

Izmene koda
Hajde sada da se bacimo na konkretan rad. Verujem da želite da barem malo istražujete, pa zato pogledajmo metodu Draw(). Prvo što ćete primetiti je parametar koji je prosleđen metodi. Taj parametar je tipa GameTime i predstavlja vreme koje je proteklo od pokretanja igre. Zašto nam treba ovakva promenljiva? Odgovor je jednostavan, jer nemaju svi računari istu brzinu. Ova promenljiva nam pomaže da znamo kada treba izvršiti animaciju u bazirano na realnom vremenu, a ne brzini procesora. Ista promenljiva je prosleđena i u Update() metodi, jer se neke radnje obavljaju u Update-u umesto u Draw-u.

Na samom kraju metode, vidimo liniju base.Draw(). Ova linija je ključna za pozivanje svog iscrtavanja i poziva Draw metodu, možda deluje čudno u ovom trenutku ali sigurno će vam trebati i nemojte je uklanjati.

Konačno, hajde da pogledamo Clear osobinu GraphicsDeviceManager-a. Ponovo, ovo je vezano za ekran na kome se pojavljuje svo crtanje. Clear zapravo uklanja sve sa ekrana i ispunjava ga jednom bojom, u ovom slučaju bojom plavog različka (ime biljke, kao maslačak na drogama :d). Zamenite sada boju u nešto kao Color.Wheat i pokrenite aplikaciju ponovo. Sada će nas umesto svetlo plave nijanse, sačekati prozor obojen bež bojom, bojom pšenice. Iako je ovo samo dosadna nijansa, MonoGame zapravo radi veliki broj stvari šezdeset puta po sekundi.

Šta dalje?
Cilj ovog tutorijala bio mali uvod u kreiranje MonoGame aplikacija, kao i objašnjenje načina funkcionisanja koda. Sada možete samo eksperimentisati sa različitim nijansama pozadine vaše igre, ali već u sledećem tutorijalu naučićemo implementaciju animacija i uvođenje sprajtova. Ako imate neke ispravke ili ne razumete neki deo tutorijala, slobodno pitajte :)
 
Poslednja izmena:
Vrh