SDL

Alrendszerek

Videó

Ezekkel a szolgáltatásokkal tudjuk manipulálni az adott videó felület bizonyos tulajdonságait, mint teljes képernyõ vagy ablakos mód, ablakfelirat és az ablak ikonja.

Ablakkezelés

Ezekkel a szolgáltatásokkal tudjuk manipulálni az adott videó felület bizonyos tulajdonságait, mint teljes képernyõ vagy ablakos mód, ablakfelirat és az ablak ikonja.

Eseménykezelés

Az SDL másik lényeges része, melynek segítségével biztosíthatjuk alkalmazásunkban a felhasználói interakciókat. A nagy része egér és billentyűzetkezelés, de tartalmaz joysticra vonatkozó elemeket is, bárennek kezelésére az SDL külön szolgáltatás csoporttal rendelkezik.

Audió

Segítségével információkat kaphatunk az adott audio hardverrõl, wav fájlokat tölthetünk a memóriába és játszhatunk le, valamint konverziókat eszközölhetünk különbözõ audio formátumok között (ne értsük félre, csak a wav formátumokon belül).

Szálak

A szálak programozása igen hasznos dolog játékfejlesztések esetén. Itt találhatjuk a szemaforokat, szálazonosítókat kezelõ szolgáltatásokat. Szálakat hozhatunk létre illetve törölhetünk, közöttük randevúkat intézhetünk.

Időzítő

A szálak mellett a másik fontos dolog az idõzítõ. Játékfejlesztések során megint csak alap dolognak számít.

Inicializálás, előkészületek

Mivel a legtöbb disztribúció alapból tartalmazza az SDL könyvtárat, így nagyon nem is térünk ki annak telepítésére. Lássuk, hogy hogyan is néz ki egy egyszerű SDL-t felhasználó C++ program.

#include #include"SDL.h" intmain() { if(SDL_Init(SDL_INIT_VIDEO)<0) { std::cerr << "Nem sikerült az SDL inicializálása! Hiba: " << SDL_GetError(); exit(1); } /*Ide jöhet az SDL-t felhasználható kódunk*/ SDL_Quit(); return0; }

Minden SDL alkalmazásnak be kell építenie az SDL.h-t. Ez a fejlécállomány fogja tartalmazni az alrendszerekre történõ hivatkozásokat. Csak azokat az alrendszereket használhatjuk melyeket az SDL_Init eljárással inicializáltunk. Ez az eljárás Uint32 típust vár paraméterként és egészet advissza. Hiba esetén -1 értékkel tér vissza, ha minden rendben akkor ez az érték 0. Hiba esetén az SDL hibaüzenetét az SDL_GetError függvény adja vissza. Az inicializálás során adhatjuk meg, hogy mely alrendszereket szeretnénk használni.

Ezt különbözõ flagekkel tehetjük meg. Az elnevezések magukért beszélnek, a felhasználható flagek a következõk: SDL_INIT_TIMER, SDL_INIT_AUDIO, SDL_INIT_VIDEO, SDL_INIT_CDROM, SDL_INIT_JOYSTIC. Ha mindent egyszerre szeretnénk használni, nem fontos beírni az összeset, használjuk inkább az SDL_INIT_EVERYTHING jelzõt. Megjegyzem ez nagyon kényelmes dolog, de ha az alkalmazásunk optimális teljesítményére szeretnénk törekedni, csak azokat az alrendszereket inicializáljuk, melyeket feltétlen használni fogunk a fejlesztés során. Például: SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO).

Eseménykezelésértfelelõs alrendszert soha nem kell külön elindítanunk, ha a videótinicializáltuk. A videóval együtt az eseménykezelés is automatikusan elindul. Az SDL rendszert a program végén az SDL_Quit utasítás kapcsolja ki, minden inicializált alrendszert deaktiválva. Ha most ezt a kódot „bedobjuk” a fordítónak akkor, bizony nem lesz sikerélményünk. Az SDL fejléceket nem fogja látni a fordító alapból. Az SDL csomaghoz tartozik egy hasznos kis program, mely segít konfigurálni a fordítót. Ennek neve: sdl-config. Megfelelõen paraméterezve megkapjuk azt a kimenetet, melyet a fordítónk hiányol: sdl-config--libs--cflags

A program kimenetét - a héjnak hála – játszva át tudjuk adni a fordítónak. Tehát egy SDL program (main.cpp) fordítása a következõképpen történhet, ha mindent szabványosan szeretnénk:

g++`sdl-config--libs--cflags` -Wall-pedantic-ansimain.cpp