Descărcați ca pptx, pdf sau txt
Descărcați ca pptx, pdf sau txt
Sunteți pe pagina 1din 17

Grafic n C/C++ cu ajutorul

bibliotecii SDL
Budaca Eduard

De ce eu?

Sunt un elev in clasa a Xa.

Am realizat un joc ntre

aprilie 2012 i ianuarie


2013 folosind SDL,

EnderRUN.
A durat 5-6 luni de munc
susinut.

Ce este SDL?

SDL = Simple DirectMedia Layer


O bibliotec C/C++
Se ocup de:

grafic 2D, inclusiv transparen


grafic 3D prin OpenGL
audio
acces la tastatur
acces la mouse
acces la joystick-uri

Funcioneaz pe Windows, Linux, Mac, (!)Android i multe


altele (20+)
Se poate folosi cu C, C++, C#, Java, Pascal, PHP, Python, Ruby
i, iari, multe altele (25+)
Este foarte rapid.
Se extinde cu biblioteci adiionale.

Ce NU este / NU poate face SDL

Nu este un alt limbaj de programare.


Nu este o aplicaie de tip IDE.
Nu este un compilator.
Nu este un motor de jocuri.
Tot trebuie s scriei cod ca s folosi SDL.
Grafica 3D nu este tocmai simpl.
Nu va ncrca dect formatul .bmp.
Nu poate afia text.
Partea audio este destul de dificil de folosit.
Curba de nvare poate fi destul de abrupt.
Din fericire, pentru unele din aceste dezavantaje,
exist biblioteci adiionale.

Instalarea bibliotecii
Descrcarea bibliotecii (versiunea mingw32)
Dezarhivarea folder-elor /include i /lib n /sdk
n Code::Blocks:

1.
2.
3.
1.
2.
3.

4.
.

La Build Options-Search Directories-Compiler adugm


directorul include;
La Build Options-Search Directories-Linker adugm
directorul lib;
Sub Linker Settings adugm bibliotecile SDL la
opiunile linker-ului. (-lmingw32 -lSDLmain lSDL)

Copierea fiierelor .dll lng executabilele


proiectului i n directorul proiectului.
Tot aa putei proceda la instalarea majoritatii
bibliotecilor n Code::Blocks.

Programarea cu SDL

Exemplu de program folosind SDL


#include "SDL/SDL.h" //Header-ul SDL
int main (int argc, char* args[]){//NEAPARAT asa.
SDL_Init(SDL_INIT_EVERYTHING); //Initializam SDL-ul
SDL_SetVideoMode(800, 600, 32, SDL_FULLSCREEN);
//initializam o fereastra 800x600x32bpp, fullscreen
//Lucru cu SDL aici...
SDL_Delay(2000);
//Va astepta 2 secunde inainte sa inchida programul
SDL_Quit(); //inchidem SDL-ul
return 0;
}
Not: Nu am folosit diacritice pe aceste slide-uri deoarece diacriticele nu fac parte din
codul ASCII i doresc ca aceast bucat de cod s poat fi copiat i lipit ntr-un cod
surs fr probleme.

Cum se folosete SDL

n primul rnd, fiecare proiect trebuie s aib


urmtoarea linie de cod inclus:

#include "SDL/SDL.h"

Pentru proiecte mici (1-3 fiiere surs), se poate


pune aceast linie la nceputul fiecrui fiier
.c/.cpp.
Pentru proiecte mai mari:

se recomand folosirea unui header (fiier .h care


conine declaraiile funciilor) inclus (prin intermediul
directivei #include).
se recomand crearea unui fiier surs care s
conin mai multe funcii destinate s fac lucrul cu
SDL mai uor.

Funcii utile n sdlwork.cpp


init_sdl();

1.

Va fi apelat la nceputul fiecrui program. Va


iniializa SDL-ul, fereastra grafic i extensiile.

close_sdl();

2.

Va fi apelat nainte de nchierea fiecrui program. Va


nchide SDL-ul, va nchide extensiile i va elibera
suprafeele folosite.

load_image();

3.

Aceast funcie va ncrca o imagine dintr-un fiier.

blit_surface ();

4.

Scopul acestei funcii este de a simplifica procesul de


lipire a unei suprafee pe alta (de exemplu pe
ecran).

Evenimente n SDL

Evenimentele sunt informaii despre orice se


ntmpl trimise programului.
Evenimentele includ:

Apsarea sau eliberarea unei taste


Micarea mouse-ului sau un click
nchiderea ferestrei
Activarea ferestrei
Redimensionarea ferestrei

Avantaje i dezavantaje a evenimentelor


Avantaje

Sunt simplu de folosit

Pot fi mai rapide

Pot fi folosite ntr-o larg varietate de


situaii

Unele tipuri de evenimente (la


nchiderea ferestrei, de exemplu) ar fi
extrem de greu de reprezentat altfel.

Dezavantaje

Cele mai mari dezavantaje apar la


evenimente de tip press and hold la
tastatur sau mouse.

Evenimentele sunt de dou tipuri:


press i release

Exemple de simptome:

Juctorul se mic doar


o dat, la apsarea
tastei, chiar dac tasta
rmne apsat
Tastele pot fi apsate i
programul s nu ia
comanda.

Keystates i Mousestates

Datorit dificultilor generate de folosirea


evenimentelor, n SDL se pot folosi i
keystates sau mousestates.
Practic, cu un apel se poate verifica starea
oricrei taste sau buton de mouse, oricnd
programatorul are nevoie (nu doar la
apsarea sau eliberarea unei taste/buton).
Tot cu un singur apel se poate citi poziia
cursorului.

Alpha Blending

Alpha blending este alt proces, mai


avansat, de obinere a transparenei. Se
mparte n 2 tipuri (alpha = nivel de
transparen):
1.
2.

Per-surface alpha, adic un nivel de


transparen setat pentru toat suprafaa
Per-pixel alpha, adic fiecare pixel va avea
propriul nivel de transparen. (RGBA)

Aceste tipuri nu se pot combina. n


general, transparena per-pixel va fi
dominant.
Nivelul de transparen poate fi ntre 0 i
255 (0 fiind SDL_ALPHA_TRANSPARENT i
255 fiind SDL_ALPHA_OPAQUE.
La citirea unei imagini de tip .png cu
sdl_image, transparena imaginii este
pstrat, devenind per-pixel alpha.

Alpha 255

Alpha 120

Alpha 0

Folosirea sistemului de alpha blending

De cele mai multe ori, SDL se ocup automat


de alpha blending.
O imagine cu transparen ncrcat cu
sdl_image va avea transparen n program
fr ca programatorul s aib cod de scris n
plus.
Totui, n funcia load_image() trebuie folosit

SDL_DisplayFormatAlpha() i nu
SDL_DisplayFormat().

Cum se afieaz o imagine n SDL


1.
2.
3.
4.

Se iniializeaz SDL i se creeaz fereastra (tot o suprafa, de


exemplu screen).
Se ncarc imaginea ntr-o suprafa, de exemplu img.
Se deschide o bucl while(1).
Se terge ecranul cu (de exemplu)
SDL_FillRect(screen, &screen->clip_rect, SDL_MapRGB(screen->format, 0, 0, 0));

5.

6.

7.

Cu funcia blit_surface(), se aplic suprafaa cu imaginea peste


suprafaa ecranului. (de exemplu blit_surface(img, screen, 0, 0,
NULL);
(!) Se apeleaz SDL_Flip() (de exemplu SDL_Flip(screen);). Acest
lucru previne plpirea (flickering) a ecranului, programatorul
aplicnd suprafeele n zona tampon care nu este afiat. La
apelul funciei SDL_Flip(), zonele sunt inversate (swapped sau
flipped) i ceea ce s-a aplicat poate fi vzut pe ecran.
Se verific dac se d Alt+F4 sau dac cere nchiderea
programului.

Informaii n plus

http://www.libsdl.org/, site-ul oficial SDL


http://www.libsdl.org/cgi/docwiki.fcg, hub al
documentaiei
http://www.libsdl.org/cgi/docwiki.fcg/SDL_API,
lista de funcii ale SDL-ului.
http://lazyfoo.net/SDL_tutorials/index.php, un
site foarte bun de tutoriale SDL.

La treab!
Remember to explore and experiment!

S-ar putea să vă placă și