Groups keyboard shortcuts have been updated
Dismiss
See shortcuts

Mapear el teclado

14 views
Skip to first unread message

Javier Pérez Pacheco

unread,
Nov 19, 2007, 6:50:33 AM11/19/07
to sdl...@googlegroups.com
Bueno, hace un tiempo ya escribí a la lista sobre este tema, pero es que no le encuentro solución y me estoy volviendo loco. Busco ayuda desesperadamente

Os cuento. La cosa es que no se como poder localizar exactamente la letra que se está pulsando. Cuando uso

event.key.keysym.sym

me devuelve la letra que estoy pulsando, pero en el caso de Windows, cuando pulso la letra "Ñ" me dice que estoy pulsando el ";" (punto y coma). He estado haciendo pruebas con el tema del unicode sin encontrar solución. Además, si por ejemplo quiero saber si un usuario quiere poner la "@", en el caso que fuera un teclado en inglés sería comprobando que se pulsa la tecla "2" y el modificador "MAYUSCULA", pero si el teclado es español, sería la tecla "2" y el modificador "ALT GR"

La cosa es que todo esto es un lío.

¿existe alguna función, forma o como sea de que después de pulsar una tecla te devuelva caracter que has pulsado?

De forma desesperada estoy pensando en hacer un mapeo total del teclado en inglés y español, pero me parece que SDL tiene que tener soluciones mejores

Por favor, cualquier cosa me puede ayudar a estas alturas

muchas gracias

Hugo Ruscitti

unread,
Nov 19, 2007, 8:38:37 AM11/19/07
to sdl...@googlegroups.com


Hola, buen día.

Efectivamente existe una forma de obtener el carácter que representa la
pulsación de una tecla: Cuando se produce un evento de tipo "KEYDOWN",
SDL devuelve una unión con algunos atributos. Entre ellos encontrarás uno
bajo el nombre "unicode". Este atributo (o registro) representa la
tecla pulsada.

Para que SDL complete ese atributo con la información que necesitas debes
activar el soporte "unicode" de tu aplicación, te dejo un ejemplo completo de
programa que realiza esa tarea:

=====
#include "SDL.h"

int main(void)
{
SDL_Event event;
SDL_Surface * screen;
int salir = 0;

SDL_Init(SDL_INIT_EVERYTHING);
SDL_EnableUNICODE(1);

screen = SDL_SetVideoMode(320, 200, 16, 0);

while (!salir)
{
SDL_PollEvent(&event);

switch (event.type)
{
case SDL_KEYDOWN:
printf("Ha pulsado: %c (%d)\n", \
event.key.keysym.unicode,
event.key.keysym.unicode);
break;

case SDL_QUIT:
salir = 1;
break;

default:
break;
}

SDL_Delay(1);
}

printf("Pulse la tecla ESC para salir del programa \n");
return 0;
}
=====


Cuando inicias el programa, crea una ventana de color negro. Puedes
pulsar cualquier tecla y en la pantalla de salida del programa se imprime
el carácter y su representación numérica. Por ejemplo, si pulsas "@", "ñ" y ";"
observarás en pantalla algo así

=====
Ha pulsado: @ (64)
Ha pulsado: ñ (241)
Ha pulsado: ; (59)
=====

bueno... mas o menos así. En realidad se imprime muchas veces por cada
tecla, pero puedes reducir la velocidad de repetición y el problema se resulve.

Probé este ejemplo en GNU/Linux, incluso cambiando el mapa de teclado mientras
la aplicación estaba corriendo, te dejo el archivo "Makefile" para
compilar el programa:

=====
CFLAGS= `sdl-config --cflags` -Wall
LDFLAGS=`sdl-config --libs`

teclado: teclado.o
=====

Es todo, si te resulta útil este ejemplo podemos extenderlo para
hacer un mini-programa en Losersjuegos, estamos necesitando
ejemplos....:

http://www.losersjuegos.com.ar/referencia/ejemplos/ejemplos.php

Saludos.

--
Hugo Ruscitti
www.losersjuegos.com.ar

javi

unread,
Nov 20, 2007, 5:25:40 AM11/20/07
to SDL en Español
Muchas gracias, era eso exactamente lo que estaba buscando. Estamos a
punto de sacar el nuevo videojuego y a veces no encuentro solución a
las cosas, supongo que por casancio mental ;-)

Por cierto Hugo, te enviaré en estos días un mail a tu cuenta
personal, si no te importa, para que me ayudes en una cosita que ya me
ayudaste cuando sacamos el juego de Super-Tirititran

espero que no te importe

muchas gracias por todo

On 19 nov, 14:38, "Hugo Ruscitti" <hugorusci...@gmail.com> wrote:

Hugo Ruscitti

unread,
Nov 20, 2007, 10:48:43 AM11/20/07
to sdl...@googlegroups.com
On Nov 20, 2007 7:25 AM, javi <javie...@gmail.com> wrote:
>
> Muchas gracias, era eso exactamente lo que estaba buscando. Estamos a
> punto de sacar el nuevo videojuego y a veces no encuentro solución a
> las cosas, supongo que por casancio mental ;-)
>
> Por cierto Hugo, te enviaré en estos días un mail a tu cuenta
> personal, si no te importa, para que me ayudes en una cosita que ya me
> ayudaste cuando sacamos el juego de Super-Tirititran
>
> espero que no te importe
>
> muchas gracias por todo

Sí Javier, no hay problema... me gustaría ayudar.

Saludos.

--
Hugo Ruscitti
www.losersjuegos.com.ar

Reply all
Reply to author
Forward
0 new messages