Tokom moje neaktivnosti na ovome forumu imao sam mnogo interesovanja u delu 2D programiranja te sam skrpio neko "znanje" koje bih voleo da prenesem na druge a i da se ne lažemo, trenutno nemam pametnijeg posla (Srezali mi budžet za izlaske pa se krpim ovako :'().
Jedna od mnogih biblioteka za 2D programiranje je SFML koji se masovno koristi za izradu 2D igrica, programa, itd...
Prvo par reÄi o SFML-o.
SFML je skraćenica za
Simple and Fast Multimedia Library. Sastoji se iz par klasa koji nam dozvoljavaju manipulisanje oblicima, grafikom i zvukom.Napisana je u C++ jeziku, što bih ja okarakterisao kao "update" na SDL koji je napisan u C-u.
Krenimo s obiÄnim programom koji će izbaciti prozor s zelenim krugom u njemu(kod preuzet s SFML stranice):
#include <SFML/Graphics.hpp>
int main()
{
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML!");
sf::CircleShape shape(100.f);
shape.setFillColor(sf::Color::Green);
while (window.isOpen())
{
sf::Event event;
while (window.pollEvent(event))
{
if (event.type == sf::Event::Closed)
window.close();
}
window.clear();
window.draw(shape);
window.display();
}
return 0;
}
Idemo detalj po detalj.
#include <SFML/Graphics.hpp>Header File za korišćenje klasa u ovom programu.
sf::RenderWindow window(sf::VideoMode(200, 200), "SFML!");Kreiranje objekta "window" za pristupanje "RenderWindow" klasi, odnosno kreiranje prozora veliÄine 200x200 s imenom "SFML!".
sf::CircleShape shape(100.f);Kreiranje objekta "shape" za pristupanje "CircleShape" klasi, odnosno kreiranje kruga.
shape.setFillColor(sf::Color::Green);Pomoću objekta "shape" smo pristupili funkciji "setFillColor" koja se nalazi u "CircleShape" klasi preko taÄke (.). Takve funkcije se nazivaju "member funkcije".
Sada sledi najvažniji deo SFML programa, ukoliko pravite igricu to će za vas biti "game loop" odnosno petlja koja će raditi sve dok se vaš program ne zatvori. (
while (window.isOpen()))
sf::Event event;Pravljenje objekta "event" za pristupanje klasi "Event".
while (window.pollEvent(event))Recimo da će ovaj loop raditi kada se pokrene neki event odnosno bilo koji unos preko ulaznih elemenata raÄunara(moje slobodno shvatanje sklono diskiminaciji ^^). DrugaÄije se naziva waitEvent. koliko sam Äitao o njemu izbegavaju mu upotrebu, osim za zatvaranje programa(ne osuÄ'ujte ovo objaÅ¡njenje jer nisam se nikad viÅ¡e interesovao od ovoga za to)
Došli smo do krajnjeg dela ovoga programa, odnosno crtanja svega pripremljenog na prozoru koji smo pre toga napravili. Crtanje izvršavamo pomoću jedne funkcije, window.draw();. Ona je smeštena u "RenderWindow" klasi zato joj pristupamo preko "window" objekta.Uz funkciju za crtanje na ekranu koriste se još 2 funkcije, jedna pre a druga posle nje.Te dve funkcije su window.clean() i window.display(). Uz samo poznavanje osnova engleskog jezika shvatićete njihovu upotrebu te je neću objasniti (mrzi me -.-).
Ukoliko smo sve lepo kompajlovali i sredili dobićete ovakvu sliku:
(http://sfml-dev.org/tutorials/2.0/images/start-linux-app.png)
Par reÄi od mene.
Dobro veÄe. Pre svega, ni ja sam nemam dovoljno iskustva u OOP programiranju (malo viÅ¡e od godinu dana) pa vam ne mogu sve do detalja opisati i objasniti i većina je moje slobodno shvatanje (sve sem koda u suÅ¡tini) pa je vrlo verovatno da sam negde pogreÅ¡io. SFML je pre svega pisan za C++ ali je napravljeno par vrsti za ostale jezike skloni OOP-u.No, kako bi kompajlovali gore stavljeni kod potrebno je izvrÅ¡iti par izmena na vaÅ¡em kompajleru, pa zavisno o kojem koristite postoji par tutova o njima:
-Visual Studio ( http://sfml-dev.org/tutorials/2.0/start-vc.php )
-Code::Blocks ( http://sfml-dev.org/tutorials/2.0/start-cb.php )
(samo ova dva za sada xD)
Na njihovom sajtu i forumu je sve lepo objaÅ¡njeno i lako za shvatanje ukoliko bar malo poznajete OOP. TakoreÄ'i ja sam upoznao većinu OOP-a uz SFML i shvatio jaÄinu ove biblioteke. Uvek su spremni da pomognu na forumu(glavni developer izmeÄ'uostalog) tako da ako imate neka pitanja a ja ili bilo ko ovde vam ne može pomoći možete se njima obratiti.
Å to se tiÄe ostalih tutorijala, nadam se da neće ostati na ovome te ću angažovati par manijaka da mi pomognu te ćemo vas snabdevati znanjem SFML-a.
Credits:
- Pisanje tutorijala i davanje slobodnih komentara - Moja malenkost, Diskretni "Plavša" Heroj.
- Pisanje koda i slika - SFML sajt(glavni developer i guess.)
Pozdrav,
Plavša