[C++] 2D programiranje

Započeo DHV, Jul 19, 2013, 23:37:58 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

DHV

*

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:






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