SDL

Színkulcsok és billentyűzet

Színkulcsok és átlátszóság

A játékokban gyakran van szükség az átlátszóság látszatára. Például van egy játékfigurát ábrázoló bitképünk valamilyen egyszínű háttér előtt, és szeretnénk kirajzolni a játék pályájára. Elég szörnyen nézne ki, ha a hátteret is kirajzolnánk, és a figura egyszínû dobozba zárva jelenne meg. Sokkal jobb lenne, ha csak azokat a képpontokat rajzolnánk ki, amelyek valóban a figura részei, nem pedig a háttéré. Ezt színkulcsos részátvitellel tehetjük meg.

Az SDL ezt is támogatja, sõt, még a színkulcs tömörítéses gyorsítását (run-length colorkey acceleration) is lehetõvé teszi számunkra (ez egy ügyes trükk a raj- zolás meggyorsítására). Az RLE gyorsítás óriási sebességnöveke- déshez vezethet színkulcsos munkáknál. Alkalmazásuk azonban csak olyan bitképek esetében célszerû, amelyek a futás alatt nem változnak (mivel az RLE szerint kódolt kép megváltoztatásához előbb ki kell bontani, majd a változtatás után újra be kell csomagolni). A színkulcs egy olyan képpontérték, amit a program átlátszó színnek határoz meg. Az SDL-ben ezt a SDL_SetColorKey függvénnyel lehet megadni.

Azok a képpontok, amik megegyeznek a színkulccsal, nem másolódnak át a kép átvitelekor. A mi játékfigurás példánkban, a tömör hátteret kell színkulcsként megadnunk, így az nem jelenik meg. A színkulcsok révén egyszerûvé válik a téglalap alakú területen tárolt, de nem téglalap formájú tárgyak használata. A következõ példánkban színkulcsos átvitelt fogunk használni arra, hogy Tux képét egy másik képre rajzoljuk rá. Tuxot egyöntetû kék szín elõtt tároltuk, így a kék színt (RGB 0, 0, 255) fogjuk színkulcsként használni. Az összehasonlítás kedvéért színkulcs nélkül is kirajzoljuk ugyanazt a képet.

Színkulcsok és átlátszóság

Egyszerû billentyûzetkezelés

Az SDL a billentyűzeten található minden billentyűhöz „virtual keysym” kódokat rendel. Ezeket a számokat (valós egészeket) az operációs rendszer saját billentyűkódjaira alakítja (amelyek a billentyűzet által küldött kódokra hivatkoznak), az SDL azonban a színfalak mögött felügyel ezekre az átalakításokra.

Minden virtuális keysymhez egy elõfeldolgozó-állandót (preprocessor symbol) rendel. Például az ESCAPE billentyűnek az SDLK_ESCAPE állandó felel meg. Az érvényes állandók listája megtalálható az SDL leírásában. Ezeket a kódokat használjuk, valahányszor csak közvetlenül szeretnénk lekérdezni valamely gomb állapotát (lenyomott, vagy felengedett), illetve az SDL ezeket adja át, amikor billentyűzeteseményt küld. A virtuális keysymeket az SDLKey adattípus határozza meg.

Közvetlenül kérdezzük le a billentyûzet állapotát, valahányszor kíváncsiak vagyunk valamelyik billentyûre. A program pillanatfelvételt kérhet a teljes billentyûzetrõl egy vektor formájában. Az SDL_GetKeyState függvény egy mutatót ad vissza az SDL belsõ billentyûzet-állapot tömbjére, amit az SDLK _keysym állandók segítségével címezhetünk meg. Ezt a függvényt csak egyetlen egyszer kell meghívni, a mutató a teljes futásidõ alatt érvényes marad. A vektor minden egyes eleme egy egyszerû Uint8-típusú jel, amely azt mutatja meg, hogy az adott billentyû lenyomott állapotban van-e. Idõnként meghívjuk az SDL_PumpEvents függvényt, ezzel frissítve a vektor értékeit.