Documente Academic
Documente Profesional
Documente Cultură
Budaca Eduard
De ce eu?
Ce este SDL?
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.
grafic 2D, inclusiv transparen grafic 3D prin OpenGL audio acces la tastatur acces la mouse acces la joystick-uri
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
1. 2.
3.
1. 2. 3.
Descrcarea bibliotecii (versiunea mingw32) Dezarhivarea folder-elor /include i /lib n /sdk n Code::Blocks:
4.
Copierea fiierelor .dll lng executabilele proiectului i n directorul proiectului. Tot aa putei proceda la instalarea majoritatii bibliotecilor n Code::Blocks.
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)
Programarea cu SDL
n primul rnd, fiecare proiect trebuie s aib urmtoarea linie de cod inclus:
Pentru proiecte mici (1-3 fiiere surs), se poate pune aceast linie la nceputul fiecrui fiier .c/.cpp. Pentru proiecte mai mari:
#include "SDL/SDL.h"
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.
init_sdl();
2.
close_sdl();
Va fi apelat la nceputul fiecrui program. Va iniializa SDL-ul, fereastra grafic i extensiile. Va fi apelat nainte de nchierea fiecrui program. Va nchide SDL-ul, va nchide extensiile i va elibera suprafeele folosite. Aceast funcie va ncrca o imagine dintr-un fiier.
3.
load_image();
4.
blit_surface ();
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
Dezavantaje
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.
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.
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.
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)
Alpha 255
Alpha 120
Alpha 0
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().
3.
4. 5.
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));
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!