10.07.2015 Views

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

[ebook]Programacion de videojuegos con SDL

SHOW MORE
SHOW LESS

You also want an ePaper? Increase the reach of your titles

YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.

P R O G R A M A C I Ó N D E V I D E O J U E G O S C O N S D LEl campo mod (<strong>de</strong> modificador) es un campo <strong>de</strong> bits que nos hablan <strong>de</strong>l estado <strong>de</strong>ciertas teclas especiales como CTRL, ALT, SHIFT, etc... Su posibles valores son:KMOD_NONEKMOD_NUMKMOD_CAPSKMOD_LCTRLKMOD_RCTRLKMOD_RSHIFTKMOD_LSHIFTKMOD_RALTKMOD_LALTKMOD_CTRLKMOD_SHIFTKMOD_ALTNingún modificadorNumlock esta pulsadoCapslock está pulsadoControl izquierdo está pulsadoControl <strong>de</strong>recho está pulsadoShift <strong>de</strong>recho está pulsadoShift izquierdo está pulsadoAlt <strong>de</strong>recho está pulsadoAlt iquierdo está pulsadoCualquier Control está pulsadoCualquier Shift está pulsadoCualquier Alt está pulsadoEl último campo <strong>con</strong>tiene el carácter unico<strong>de</strong> <strong>de</strong> la tecla pulsada. Por <strong>de</strong>fecto estecampo no se rellena, ya que la traducción <strong>con</strong>lleva cierta sobrecarga, por lo queasegúrate <strong>de</strong> activarlo sólo si lo necesitas. Para activar este campo usamos la siguientefunción:int <strong>SDL</strong>_EnableUNICODE(int enable);Esta función <strong>de</strong>vuelve el anterior estado antes <strong>de</strong>l cambio. El parámetro enable pu<strong>de</strong>tomar tres valores: 0 para <strong>de</strong>sactivar la traducción unico<strong>de</strong>, 1 para activarla y –1 para<strong>de</strong>jar el estado como está. Esto nos sirve para <strong>con</strong>ocer el estado mediante el valor <strong>de</strong>retorno <strong>de</strong> la función.Si los 9 bits más altos <strong>de</strong>l código están a 0, es un carácter ASCII. El siguiente códigonos <strong>de</strong>vuelve el carácter ASCII en la variable ch (en caso <strong>de</strong> que no sea un carácterunico<strong>de</strong>).char ch;if ( (keysym.unico<strong>de</strong> & 0xFF80) == 0 ) {ch = keysym.unico<strong>de</strong> & 0x7F;}else {printf("Es un carácter unico<strong>de</strong>.\n");}Tanto en el ejemplo3_1, como en el ejemplo3_2 <strong>de</strong> la sección anterior sobre el vi<strong>de</strong>o,pue<strong>de</strong>s ver un ejemplo <strong>de</strong> lectura <strong>de</strong>l teclado. Ahora <strong>de</strong>berías po<strong>de</strong>r enten<strong>de</strong>r este códigosin ningún problema.Po<strong>de</strong>mos, a<strong>de</strong>más <strong>de</strong> <strong>con</strong>sultar el teclado mediante eventos, hacer una <strong>con</strong>sultadirecta al teclado para <strong>con</strong>ocer su estado actual. Es como hacer una “fotografía” <strong>de</strong>lestado <strong>de</strong>l teclado en un momento dado. La siguiente función realiza esta tarea:Uint8 *<strong>SDL</strong>_GetKeyState(int *numkeys);Esta función nos <strong>de</strong>vuelve un puntero a un array <strong>con</strong> el estado <strong>de</strong> cada una <strong>de</strong> lasteclas <strong>de</strong>l teclado. En el parámetro numkeys se <strong>de</strong>vuelve el tamaño <strong>de</strong> este array.Normalmente le pasaremos el valor NULL como parámetro. Para <strong>con</strong>sultar este arrayutilizamos las mismas <strong>con</strong>stantes <strong>de</strong> teclado que vimos antes. Si la tecla estaba pulsada43

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!