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
Negde početkom ove godine, započeo sam pisanje tutorijala o programiranju i sveukupnom razvoju softvera. To je trasalo nekih dva i po meseca, a onda je krajem februara objavljen poslednji tutorijal osnvova jezika C#. Zatim, kada je trebalo da počnem pisanje pravih tutorijala o igrama, izgubio sam volju da pišem, ali evo me sad ponovo krećemo aktivno
Ako nemate barem osnovno znanje o C#-u ili ikakvo znanje o programiranju, preporučio bih vam da pročitate moj mali "kurs" napisan o tome koji je dostupan baš na ovom forumu potpuno besplatno. Sastoji se iz samo 13 kratkih tutorijala, koji će vam omogućiti da rešavate razne logičke probleme, a velika većina ovog kursa se takođe bazira na samim osnovama. Sve što je potrebno jeste da u polje "pretraga" unesete pojam #xna-gwid što će vam pokazati sve objavljene tutorijale.
Šta ćemo danas obraditi?
Danas ćemo kreirati, već dugo očekivanu, sasvim funkcionalnu i igrivu video igru! Igra je bazirana na prikazivanju kvadrata na ekranu, koje mi moramo pojuriti srelicom kursora. Iako ne deluje toliko zanimljivo, u samo par linija koda, kreiraćete igru, razumeti kako ona tačno funkcioniše i samim tim izdvojiti se od ostatka ljudi koji u većini slučajeva samo igraju igre Ako ste spremni, hajde da počnemo!
Kreiranje projekta, kao i nalaženje izvornog koda, ćemo preskočiti. Ukoliko niste sigurni kako to pravilno uraditi, možete to pročitati u ovom tutorijalu LINK
Jedino što treba dodati jeste ubacivanje ove dve linije koda kao petu i šestu :
Kako bismo razumeli šta kreiramo i na koji način, moramo znati da C# u zavisnosti od mesta pisanja koda, može prevesti red izvršavanja, ali i same funkcije igre u suprotnom smeru. Nakon kreiranja projekta, sav potreban kod za nesmetan rad naše igre, smeštamo u fajlu Game1.cs. Na samom početku bloka klase Game1, primećujemo dve linije koda koje ne poseduju svoj blok. Ovaj prostor nazivamo prostor za inicijalizaciju. U ovom delu navodimo sve komponente koje ćemo koristiti tokom daljeg programiranja. Hajde da ispunimo taj blok nekim promenljivim vrednostima koje ćemo koristiti. Tačno ispod linije "SpriteBatch spriteBatch;" unesite sledeće :
Poslovna Fora - Primetili ste da je jedino promenljiva ZivotniVekKvadrata imenovana velikim početnim slovom, što je neobavezno, ali ne samo ja već i mnogi drugi programeri koriste ovo za raspoznavanje konstantnih vrednosti (const) čija se vrednost ne menja tokom rada programa.
Metoda Initialize()
Nakon što je naš program pokrenut, na snagu stupa metoda Initialize() koja se izvršava samo jednom tokom životnog veka naše igre odnosno programa. U njemu je korisno izvršiti promene prozora, kao što su rezolucija, vidljivost kursora, otvaranje u punom ekranu itd. Da bismo videli kako ovo zapravo funkcioniše, pokrenimo neizmenjeni program pristikom na dugme Start ili pritiskom tipke F5 na tastaturi. Prevlačenjem strelice na igru, primetićemo da ona nestaje, a budući da želimo da ona bude vidljiva, dodajmo sledeću liniju odmah iza polja "base.Initialize();" u kojoj ćemo uključiti vidljivost strelice :
Metoda LoadContent()
Jedna od dužnosti metode Initialize, između ostalog je i da poziva metodu LoadContent(). U njenom bloku se odvija učitavanje, kao i "crtanje" slika na ekranu pomoću promenljive spriteBatch, nakon njene inicijalizacije.
Da bismo videli kako ona radi, kreiraćemo sprajt našeg kvadrata. To ćemo jednostavno učiniti, pokretanjem Microsoft Paint-a ili programa za obradu slika po vašem izboru. Kreirajmo beli kvadrat dužine i visine 16px. To možemo učiniti odabirom olovke i zumiranjem do 800%. Zatim kada opcrtamo 16 piksela po horizontali i po vertikali, opsečemo integrisanim alatom traženu dužinu i širinu i na kraju sve obojimo u belo. Ovaj fajl sačuvajmo u lokaciji po želji, pod nazivom kvadrat sa ekstenzijom .bmp (16-bit color bitmap).
Kada smo završili, dodajmo fajl u content folder. Ovo obavljamo koristeći alat zvani MonoGame Pipeline. Sve što je potrebno jeste da se u Solution Explorer-u unutar Visual Studio-a orijentičemo do foldera Content, a zatim pritisnemo desni klik na fajl Content.mgcb pa "Open with". U novom prozoru idemo na "Add", a zatim "...", lociramo Pipeline.exe u "C:\Program Files (x86)\MSBuild\MonoGame\v3.0\Tools" pa odaberemo "Open", pa "OK", pa opet "OK". Sada u novootvorenom prozoru biramo "Add Existing Item", klikom na ikonicu pravougaonog oblika sa plusom u gornjem levom uglu, a onda lociramo kreirani bitmap kvadrat. U prozoru biramo prvu opciju (Copy file), a zatim Add. Kako bismo sačuvali trenutne postavke, idemo na File pa Save.
**Savet** Nakon što jednom dodamo Pipeline u Visual Studio kao open with opciju, on će je automatski koristiti svaki sledeći put
**Savet** Radi efikasnosti, ne zatvarajte Pipeline.
Sada ćemo se ponovo vratiti u Game1.cs i dodati sledeću liniju koda nakon inicijalizacije spriteBatch-a u metodi LoadContent(), koja će učitati naš sprajt u program :
Ako nemate barem osnovno znanje o C#-u ili ikakvo znanje o programiranju, preporučio bih vam da pročitate moj mali "kurs" napisan o tome koji je dostupan baš na ovom forumu potpuno besplatno. Sastoji se iz samo 13 kratkih tutorijala, koji će vam omogućiti da rešavate razne logičke probleme, a velika većina ovog kursa se takođe bazira na samim osnovama. Sve što je potrebno jeste da u polje "pretraga" unesete pojam #xna-gwid što će vam pokazati sve objavljene tutorijale.
Šta ćemo danas obraditi?
Danas ćemo kreirati, već dugo očekivanu, sasvim funkcionalnu i igrivu video igru! Igra je bazirana na prikazivanju kvadrata na ekranu, koje mi moramo pojuriti srelicom kursora. Iako ne deluje toliko zanimljivo, u samo par linija koda, kreiraćete igru, razumeti kako ona tačno funkcioniše i samim tim izdvojiti se od ostatka ljudi koji u većini slučajeva samo igraju igre Ako ste spremni, hajde da počnemo!
Kreiranje projekta, kao i nalaženje izvornog koda, ćemo preskočiti. Ukoliko niste sigurni kako to pravilno uraditi, možete to pročitati u ovom tutorijalu LINK
Jedino što treba dodati jeste ubacivanje ove dve linije koda kao petu i šestu :
Struktura Igreusing System;
using System.Collections;
Kako bismo razumeli šta kreiramo i na koji način, moramo znati da C# u zavisnosti od mesta pisanja koda, može prevesti red izvršavanja, ali i same funkcije igre u suprotnom smeru. Nakon kreiranja projekta, sav potreban kod za nesmetan rad naše igre, smeštamo u fajlu Game1.cs. Na samom početku bloka klase Game1, primećujemo dve linije koda koje ne poseduju svoj blok. Ovaj prostor nazivamo prostor za inicijalizaciju. U ovom delu navodimo sve komponente koje ćemo koristiti tokom daljeg programiranja. Hajde da ispunimo taj blok nekim promenljivim vrednostima koje ćemo koristiti. Tačno ispod linije "SpriteBatch spriteBatch;" unesite sledeće :
Sada ćemo razjasniti značenje svih pojmova. Većina ovih reči ne bi trebalo da budu nepoznate osim par razlika koje XNA uvodi u odnosu na standardne biblioteke C#-a. Random, koji smo već ranije pominjali, predstavlja tip korišten za generisanje nasumičnih brojeva, kome dajemo naziv rand. Zatim Texture2D predstavlja tip kojim učitavamo teksture, tzv. sprajtove koji prestavljaju dvodimenzionalne slike. Rectangle je tip koji je u XNA-u tj. MonoGame-u korišten za čuvanje informacija o lokaciji objekata na ekranu, koja se izražava u pikselima i predstavlja horizontalnu i vertikalnu udaljenost objekta od gornjeg levog ugla prozora igre. Rezultat, kao što mu ime govori, jeste promenljiva za čuvanje informacija o broju "ulovljenih" kvadrata, dok preostaloVreme i ZivotniVekKvadrata skladište informacije o broju sekundi koliko će objekat biti prisutan na ekranu, odnosno broju sekundi koliko će ukupno biti prisutan. Na samom kraju, preostaje niz tipa Color, koji služi za skladištenje boja, kao što su Red, CornFlowerBlue, NavyBlue itd.Random rand = new Random();
Texture2D teksturaKvadrata;
Rectangle trenutniKvadrat;
int rezultat = 0;
float preostaloVreme = 0.0f;
const float ZivotniVekKvadrata = 0.75f;
Color[] boje = new Color[3] {Color.Yellow, Color.Red, Color.Orange};
Poslovna Fora - Primetili ste da je jedino promenljiva ZivotniVekKvadrata imenovana velikim početnim slovom, što je neobavezno, ali ne samo ja već i mnogi drugi programeri koriste ovo za raspoznavanje konstantnih vrednosti (const) čija se vrednost ne menja tokom rada programa.
Metoda Initialize()
Nakon što je naš program pokrenut, na snagu stupa metoda Initialize() koja se izvršava samo jednom tokom životnog veka naše igre odnosno programa. U njemu je korisno izvršiti promene prozora, kao što su rezolucija, vidljivost kursora, otvaranje u punom ekranu itd. Da bismo videli kako ovo zapravo funkcioniše, pokrenimo neizmenjeni program pristikom na dugme Start ili pritiskom tipke F5 na tastaturi. Prevlačenjem strelice na igru, primetićemo da ona nestaje, a budući da želimo da ona bude vidljiva, dodajmo sledeću liniju odmah iza polja "base.Initialize();" u kojoj ćemo uključiti vidljivost strelice :
Sada ponovo pokrenimo isti program i videćemo promenu u vidljivosti kursora, koji je sada prisutan svuda na ekranu.this.IsMouseVisible = true;
Metoda LoadContent()
Jedna od dužnosti metode Initialize, između ostalog je i da poziva metodu LoadContent(). U njenom bloku se odvija učitavanje, kao i "crtanje" slika na ekranu pomoću promenljive spriteBatch, nakon njene inicijalizacije.
Da bismo videli kako ona radi, kreiraćemo sprajt našeg kvadrata. To ćemo jednostavno učiniti, pokretanjem Microsoft Paint-a ili programa za obradu slika po vašem izboru. Kreirajmo beli kvadrat dužine i visine 16px. To možemo učiniti odabirom olovke i zumiranjem do 800%. Zatim kada opcrtamo 16 piksela po horizontali i po vertikali, opsečemo integrisanim alatom traženu dužinu i širinu i na kraju sve obojimo u belo. Ovaj fajl sačuvajmo u lokaciji po želji, pod nazivom kvadrat sa ekstenzijom .bmp (16-bit color bitmap).
Kada smo završili, dodajmo fajl u content folder. Ovo obavljamo koristeći alat zvani MonoGame Pipeline. Sve što je potrebno jeste da se u Solution Explorer-u unutar Visual Studio-a orijentičemo do foldera Content, a zatim pritisnemo desni klik na fajl Content.mgcb pa "Open with". U novom prozoru idemo na "Add", a zatim "...", lociramo Pipeline.exe u "C:\Program Files (x86)\MSBuild\MonoGame\v3.0\Tools" pa odaberemo "Open", pa "OK", pa opet "OK". Sada u novootvorenom prozoru biramo "Add Existing Item", klikom na ikonicu pravougaonog oblika sa plusom u gornjem levom uglu, a onda lociramo kreirani bitmap kvadrat. U prozoru biramo prvu opciju (Copy file), a zatim Add. Kako bismo sačuvali trenutne postavke, idemo na File pa Save.
**Savet** Nakon što jednom dodamo Pipeline u Visual Studio kao open with opciju, on će je automatski koristiti svaki sledeći put
**Savet** Radi efikasnosti, ne zatvarajte Pipeline.
Sada ćemo se ponovo vratiti u Game1.cs i dodati sledeću liniju koda nakon inicijalizacije spriteBatch-a u metodi LoadContent(), koja će učitati naš sprajt u program :
teksturaKvadrata = Content.Load<Texture2D>("kvadrat");