PDA

Ver la versión completa : Codigos de teclas para SDL



snork3ls
05/01/2011, 20:03
Hola. Estoy haciendo un juego (o algo asi) con SDL y no me aclaro para leer las teclas cuando lo pruebo desde mi ordenador.

He visto que hay un tutorial pero lee el joystick de la consola.

Al principio del proyecto me sale esto:


/* GP2X button mapping */
enum MAP_KEY
{
VK_UP , // 0
VK_UP_LEFT , // 1
VK_LEFT , // 2
VK_DOWN_LEFT , // 3
VK_DOWN , // 4
VK_DOWN_RIGHT , // 5
VK_RIGHT , // 6
VK_UP_RIGHT , // 7
VK_START , // 8
VK_SELECT , // 9
VK_FL , // 10
VK_FR , // 11
VK_FA , // 12
VK_FB , // 13
VK_FX , // 14
VK_FY , // 15
VK_VOL_UP , // 16
VK_VOL_DOWN , // 17
VK_TAT // 18
};


Que es para mapear las teclas ¿?

Para leer el teclado he puesto esto:

while (SDL_PollEvent (&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
/* if press Ctrl + C, terminate program */
if ( (event.key.keysym.sym == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) )
done = 1;

if ( event.jbutton.button == VK_START )
done = 1;

if (event.key.keysym.sym== VK_DOWN)
{
px+=dx*2;
py+=dy*2;
}

break;
case SDL_KEYUP:
...

Ahi es donde compruebo la pulsacion de la tecla, pero lo dicho. Cuando lo pruebo en el ordenador no hace nada al pulsar el cursor abajo. Creo que estan mal mapeadas porque si no pongo la condicion (lo del VK_DOWN) y simplemente meto esas dos lineas si que funciona.
:lamer:

^MiSaTo^
05/01/2011, 20:35
Hola. Estoy haciendo un juego (o algo asi) con SDL y no me aclaro para leer las teclas cuando lo pruebo desde mi ordenador.

He visto que hay un tutorial pero lee el joystick de la consola.

Al principio del proyecto me sale esto:


/* GP2X button mapping */
enum MAP_KEY
{
VK_UP , // 0
VK_UP_LEFT , // 1
VK_LEFT , // 2
VK_DOWN_LEFT , // 3
VK_DOWN , // 4
VK_DOWN_RIGHT , // 5
VK_RIGHT , // 6
VK_UP_RIGHT , // 7
VK_START , // 8
VK_SELECT , // 9
VK_FL , // 10
VK_FR , // 11
VK_FA , // 12
VK_FB , // 13
VK_FX , // 14
VK_FY , // 15
VK_VOL_UP , // 16
VK_VOL_DOWN , // 17
VK_TAT // 18
};


Que es para mapear las teclas ¿?

Para leer el teclado he puesto esto:

while (SDL_PollEvent (&event))
{
switch (event.type)
{
case SDL_KEYDOWN:
/* if press Ctrl + C, terminate program */
if ( (event.key.keysym.sym == SDLK_c) && (event.key.keysym.mod & (KMOD_LCTRL | KMOD_RCTRL)) )
done = 1;

if ( event.jbutton.button == VK_START )
done = 1;

if (event.key.keysym.sym== VK_DOWN)
{
px+=dx*2;
py+=dy*2;
}

break;
case SDL_KEYUP:
...

Ahi es donde compruebo la pulsacion de la tecla, pero lo dicho. Cuando lo pruebo en el ordenador no hace nada al pulsar el cursor abajo. Creo que estan mal mapeadas porque si no pongo la condicion (lo del VK_DOWN) y simplemente meto esas dos lineas si que funciona.
:lamer:

Si lo quieres probar en el ordenador tendrás que usar:
event.key.keysym.sym == SDLK_DOWN o UP o la que sea ;)

Lo otro son los eventos de joystick para la GP2X, que no van exactamente igual que las teclas del teclado del PC. Por eso no te funciona. :brindis:

hardyx
05/01/2011, 20:46
Los códigos de los cursores y botones son diferentes de la consola al PC. Por eso lo mejor es hacer un #ifdef GP2X ..... #else ..... #endif y poner en cada parte el código adecuado. Porque en un sitio tienes que leer el joystick y en otro el teclado.

Además si lo haces para Wiz algunos códigos son diferentes, y si es para Caanoo.. ¡¡¡es la fiesta padre!!!

snork3ls
06/01/2011, 10:45
De momento solo voy a probar en pc. Aun no me la he comprado, la Caanoo (pero no podia esperar para programarla).

He estado mirando y lo que me falta son los codigos. ¿Donde los puedo encontrar?

^MiSaTo^
06/01/2011, 10:49
De momento solo voy a probar en pc. Aun no me la he comprado, la Caanoo (pero no podia esperar para programarla).

He estado mirando y lo que me falta son los codigos. ¿Donde los puedo encontrar?

Busca en la documentación de SDL los códigos de las teclas de teclado, para que puedas probar en tu PC.

Si quieres echar un ojo a estos mini tutoriales que hice... http://devwiki.misato.es/doku.php/sdl
Son para aprender SDL en el PC (de momento sólo hay 3, sorry)

snork3ls
06/01/2011, 10:52
SOLUCIONADO!!! Por si alguien mas lo necesita...

Hay que mapearlo con los valores de teclado que lleva sdl. Son:

SDLK_tecla

Donde tecla es UP, DOWN.... Por ejemplo para mapear cursor arriba seria:

enum MAP_KEY
{
VK_UP =SDLK_UP,

Era mas facil de lo que pense.


These are the Dingux SDL Keys:

Up -> SDLK_UP 237
Down -> SDLK_DOWN 274
Left -> SDLK_LEFT 276
Right -> SDLK_RIGHT 275
A -> SDLK_LCTRL 306
B -> SDLK_LALT 308
X -> SDLK_SPACE 32
Y -> SDLK_LSHIFT 304
L -> SDLK_TAB 9
R -> SDLK_BACKSPACE 8
Select -> SDLK_ESCAPE 27
Start -> SDLK_RETURN 13

hardyx
06/01/2011, 14:23
Programación de videojuegos con SDL, página 40 (eventos del teclado)
http://www.agserrano.com/publi.html