DoubleBuffer

Programerska zajednica
It is currently Tue Jan 23, 2018 1:01 pm

Board index » Resursi za učenje » Za potpune početnike!

All times are UTC + 1 hour




Post new topic Reply to topic  [ 7 posts ] 
Author Message
PostPosted: Thu Jun 25, 2009 5:52 pm 
Offline
Romulanski špijun na Zemlji
User avatar

Joined: Fri Sep 05, 2008 12:35 pm
Posts: 1583
Location: Njemacka
Ovdje se nalazi source kod od jednostavnog programa u kojem ucitavate neku sliku sa diska, crtate je u prozor i mijenjate joj pozicija sa arrow tipkama. (taj isti kod napisan u Pythonu se moze vidjeti ovdje)

Da bi kod mogli pokrenuti:
morate imati instaliran neki C/C++ compiler i po mogucnosti neki IDE ako kanite dalje prckati po kodu, ovo je moja preporuka da bi najlakse i najbezbolnije izkompajlirali kod i pokrenuli program:

Dev-C++ 4.9 - 9Mb
http://prdownloads.sourceforge.net/dev- ... _setup.exe

SDL devpak za Dev-C++ - 1Mb
http://devpaks.org/category.php?category=SDL
- preporucujem ovaj: SDL Library version: 1.2.12 Devpak version: 1zapo, jer ima 2 gotova pocetnika templatea/primjera s kojima mozete pocet drljat bez da morate ista konfigurirati -> File -> New -> Project -> Multimedija -> SDL ili SDL&OpenGL

Kod instalacije ne treba nista posebno konfigurirati, jednostavno je kao i instaliranje neke igrice. Nakon sto se Dev-C++ instalira devpak datoteka se samo duplo klikne i automatski instalira u Dev-C++

Ovdje se moze skinuti source kod sa komentarima (u folderu C++):
http://www.box.net/shared/mhsr44earl
- kod se pokrece tako da pokrenete Kocka.dev koji se otvori u Dev-C++ programu. U njemu pritisnete F9, prvi puta ce javiti gresku jer jedan file fali, samo ignorirajte jer je taj file u meduvremenu izgeneriran i pritisnite jos jednom F9, ovaj put ce do kraja iskompajlirati program i pokrenuti ga.


Last edited by Danijel Korent on Thu Jun 25, 2009 6:55 pm, edited 9 times in total.

Top
 Profile  
 
PostPosted: Thu Jun 25, 2009 5:53 pm 
Offline
Romulanski špijun na Zemlji
User avatar

Joined: Fri Sep 05, 2008 12:35 pm
Posts: 1583
Location: Njemacka
Source kod programa bez komentara:

Code:
#include <SDL/SDL.h>


int main (int argc, char *argv[])
{
    SDL_Init(SDL_INIT_EVERYTHING);
    atexit (SDL_Quit);

   
    SDL_Surface *glavni_buffer;
    glavni_buffer = SDL_SetVideoMode (800, 600, 32, SDL_DOUBLEBUF);

    int kocka_PozicijaX, kocka_PozicijaY, kocka_brzina;
    kocka_PozicijaX = 100;
    kocka_PozicijaY = 100;
    kocka_brzina = 50;
   
    SDL_Surface *kocka_slika;
    kocka_slika = SDL_LoadBMP("kocka.bmp");
   
    bool glavna_petlja = true;
   

    while (glavna_petlja == true)
    {

    SDL_Event event;
    while (SDL_PollEvent(&event))
      {
      
      if (event.type == SDL_QUIT) glavna_petlja = false;
      
      if  (event.type == SDL_KEYDOWN)
         {
         if (event.key.keysym.sym == SDLK_ESCAPE) glavna_petlja = false;
         if (event.key.keysym.sym == SDLK_LEFT) kocka_PozicijaX = kocka_PozicijaX - kocka_brzina; 
         if (event.key.keysym.sym == SDLK_RIGHT) kocka_PozicijaX = kocka_PozicijaX + kocka_brzina;
         if (event.key.keysym.sym == SDLK_UP) kocka_PozicijaY = kocka_PozicijaY - kocka_brzina;
         if (event.key.keysym.sym == SDLK_DOWN) kocka_PozicijaY = kocka_PozicijaY + kocka_brzina;
         }
      }

    Uint32 color;
    color = SDL_MapRGB (glavni_buffer->format, 0, 0, 0);
    SDL_FillRect (glavni_buffer, NULL, color);
       
    SDL_Rect pozicija;
    pozicija.x = kocka_PozicijaX;
    pozicija.y = kocka_PozicijaY;
    pozicija.w = kocka_slika->w;
    pozicija.h = kocka_slika->h;

    SDL_BlitSurface(kocka_slika, NULL, glavni_buffer, &pozicija);
    SDL_Flip (glavni_buffer);
    }
return 0;
}



Last edited by Danijel Korent on Fri Jun 26, 2009 11:09 am, edited 5 times in total.

Top
 Profile  
 
PostPosted: Thu Jun 25, 2009 5:54 pm 
Offline
Romulanski špijun na Zemlji
User avatar

Joined: Fri Sep 05, 2008 12:35 pm
Posts: 1583
Location: Njemacka
Source kod sa komentarima: (moglo bi ruzno izgledati na nizoj rezoluciji)

Code:
#include <SDL/SDL.h> // includamo SDL library  da mozemo koristiti njegove funkcije



int main (int argc, char *argv[]) // da ne idem u detalje ovim se u C++ oznacava pocetak naseg programa
{
    // SDL-ova funkcija koju moramo pozvati da se sam SDL interno inicijalizira
    // bez toga ne rade njegove funkcije
    SDL_Init(SDL_INIT_EVERYTHING);

   // isto kao i ovo gore jednostavno se mora pozvati da bi sve OK zavrsilo :)
    atexit (SDL_Quit);
   

    // deklaracija objekta, u C/C++ prvo mu treba reci sto je, u ovom slucaju glavni_buffer da bi ga mogli
    // koristiti - ova zvjezica ozdacava da je to pointer - tesko je u malo rijeci objasniti sto je pointer
    // tako da cete za sada morati prihvatiti kao nesto sto tu mora biti
    SDL_Surface *glavni_buffer;

    glavni_buffer = SDL_SetVideoMode (800, 600, 32, SDL_DOUBLEBUF);
    // funkcija  SDL_SetVideoMode stvara prozor na temelju argumenata koje smo joj dali - rezolucija, nacin
    // rada povrsine koju smo dobili - ovdje je double buffer, i broj biteva boje
    // ta funkcija ujedno i "inicijalizira"  glavni_buffer


    // ovdje smo si definirali nekliko varijbala koje cemo koristiti u nasem programu,
    // mislim da ih ne treba posebno komentirati.. :)
    // deklaracija  varijabala - govori compileru da su te tri varijable int tipa - odnsno cjelobrojne
    int kocka_PozicijaX, kocka_PozicijaY, kocka_brzina;
    kocka_PozicijaX = 100;
    kocka_PozicijaY = 100;
    kocka_brzina = 50;
   
    // deklaracija da je temp SDL_Surface tip varijable
    SDL_Surface *kocka_slika;

    // ovom funkcijom se ucitava sklika iz zadane datoteku u varijablu kocka_slika
    kocka_slika = SDL_LoadBMP("kocka.bmp");

   
    // varijabla glavna petlja koja se koritisti u nasoj petlju dolje,
    // kada je True petlja se "vrti", a kada je False petlja se prekida...
    bool glavna_petlja = true;
   

    // kao sto pise gore -  kada je True petlja se "vrti", a kada je False petlja se prekida...
    while (glavna_petlja == true)
    {
    // vitlicastim zagradama { }  se ograduje odreden kod nakon naredbe za petlju, if i sl. odnosno odreduje
    //  sto se sve izvrsava  unutar te petlje ili if-a, svaki { mora imati i svoj } inace bude svasta :)

    SDL_Event event; // deklarira se varijabla event u koji ce primati input od korisnika

    // ova petlja uzima  iz funkcije SDL_PollEvent nas unos/user input i salje ga u varijablu event
    while (SDL_PollEvent(&event))
      {
      
        // ako je pritisnut gumb x na prozoru  varijabla glavna_petlja je false
        // a time se i prekida ova petlja
      if (event.type == SDL_QUIT) glavna_petlja = false;
       
      if  (event.type == SDL_KEYDOWN) // ako je pritisnut ESC
         {
         // ako je pritisnut ESC varijabla glavna_petlja je false a time se i prekida ova petlja
         if (event.key.keysym.sym == SDLK_ESCAPE) glavna_petlja = false;
         //ako je pritisnuta lijeva tipka (ona strelica lijevo :D ) onda se
         // pozicija kocke poveca za iznos varijable kocka_brzina
         if (event.key.keysym.sym == SDLK_LEFT) kocka_PozicijaX = kocka_PozicijaX - kocka_brzina; 
         if (event.key.keysym.sym == SDLK_RIGHT) kocka_PozicijaX = kocka_PozicijaX + kocka_brzina;
         if (event.key.keysym.sym == SDLK_UP) kocka_PozicijaY = kocka_PozicijaY - kocka_brzina;
         if (event.key.keysym.sym == SDLK_DOWN) kocka_PozicijaY = kocka_PozicijaY + kocka_brzina;
         }
      }

    // ovaj dio koda puni nas glavni buffer sa RGB bojom 0,0,0

    // znaci crnom kako bi se mogla u njemu crtati nova slika - odnosno da se nova ne crta preko stare
    // deklaracije varijable color, potrebna kao argument kod punjenja glavnog buffera odredenom bojom
    Uint32 color;
    // ova funkcija stavlja u varijablu color boju koja se zadana argumentima te funkcije
    color = SDL_MapRGB (glavni_buffer->format, 0, 0, 0);
    // glavni_buffer se cijelu puni zadanom bojom - crnom
    SDL_FillRect (glavni_buffer, NULL, color);
       

    // ovdje se kreira "pravokutnik" sa x,y,w,h vrijednostima  koje opisuju gdje cemo nasu kocku nacrtati

    // pozicija je SDL_rect tip varijable, a taj tip je struktura,
    // odnosno varijabla koja se sastoji od vise varijabla - u nasem slucaju x,y,w,h
    SDL_Rect pozicija;
    pozicija.x = kocka_PozicijaX; // pozicija na x osi
    pozicija.y = kocka_PozicijaY; // pozicija  na y osi
    pozicija.w = kocka_slika->w; // sirina - pridruzuje se duzina slike u varijabli kocka_slika
    pozicija.h = kocka_slika->h; // duzina - pridruzuje se duzina slike u varijabli kocka_slika

    // crta sadrzaj varijabke kocku_slika u glavni_buffer  na poziciji zadani varijablom pozicija
    SDL_BlitSurface(kocka_slika, NULL, glavni_buffer, &pozicija);
    // prebacuje sadrzaj glavnog buffera u prozor (na ekran)
    SDL_Flip (glavni_buffer); 
    } // kraj glavne peljte i petlja krece iz pocetka --> while (glavna_petlja == true)
return 0;
}


_________________
a.k.a. Koki


Top
 Profile  
 
PostPosted: Fri Jun 26, 2009 10:35 pm 
Offline
Spaaaaaaace!
Spaaaaaaace!
User avatar

Joined: Tue Aug 26, 2008 2:02 pm
Posts: 593
Dobar posao, sticky.

_________________
Don't combine bracket and dot syntax in Objective-C, it's bad practice and quite irritating.
There is no such thing as a better graphics API. They are just different. And hot. And sexy. I should stop now.
Your matrices are belong to us.


Top
 Profile  
 
PostPosted: Sat Jun 27, 2009 7:57 pm 
Offline
User avatar

Joined: Tue Aug 26, 2008 8:23 pm
Posts: 68
Evo ja baš sad radim s SDL bibliotekom, jako dobro samo tako nastavi! :)

Inače probaj još dublje i detaljnije objašnjavati što kako radi, ako možeš naravno, mislim da bi to još više usavršilo ovu seriju tutoriala :)


Top
 Profile  
 
PostPosted: Sun Jun 28, 2009 9:24 pm 
Offline
Romulanski špijun na Zemlji
User avatar

Joined: Fri Sep 05, 2008 12:35 pm
Posts: 1583
Location: Njemacka
heh.. to sam vise stavio kao template za brzi i lagani pocetak za pocetnike... ne znam dal cu jos sta pisati, C++ i SDL prakticki uopce ne koristim...

_________________
a.k.a. Koki


Top
 Profile  
 
PostPosted: Tue Jun 30, 2009 1:16 pm 
Offline
User avatar

Joined: Tue Aug 26, 2008 8:23 pm
Posts: 68
OK super no ja ti ipak preporučavam da pokušaš to bolje svojim rječima i dublje opisati :)

Bilo bi dobro da i obradiš SDL_mixer za zvuk :) Naravno, ništa prenapredno nego samo osnovni tutorial kako pokrenuti neku zvučnu datoteku putem konzole.

Samo tako naprijed! :tup:


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic Reply to topic  [ 7 posts ] 

Board index » Resursi za učenje » Za potpune početnike!

All times are UTC + 1 hour


Who is online

Users browsing this forum: No registered users and 1 guest


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
cron
Powered by phpBB® Forum Software © phpBB Group