[ebook]Programacion de videojuegos con SDL
[ebook]Programacion de videojuegos con SDL
[ebook]Programacion de videojuegos con SDL
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