Teclas combinadas

Tratamos sobre el manejo de APIs frecuentemente utilizadas en el desarrollo de videojuegos, como SDL, pygame o SFML.

Teclas combinadas

Notapor RafaG » Lun Abr 12, 2010 3:05 pm

Hola, ¿qué tengo que hacer para trabajar con varias (dos) teclas combinadas a la vez?

Estoy haciendo un juego de dos jugadores, consiste en apretar el mayor número de veces las teclas, el jugador 1 tiene que presionar la tecla Ctrl Izquierda y el segundo jugador Ctrl Derecha. Si los jugadores pulsan muy rápidamente las teclas seguramente coincidirán alguna vez, entonces para eso necesito trabajar con teclas combinadas.

Vi cómo se hacía en el ejemplo "Desplazamiento suave":

Código: Seleccionar todo
if (teclas [SDLK_UP] && teclas [SDLK_LEFT])


Pero cuando yo uso en mi juego eso no me funciona:

Código: Seleccionar todo
if (teclas[SDLK_LCTRL])
{
        puntos1++;
}

if (teclas[SDLK_RCTRL])
{
        puntos2++;
}

if (teclas[SDLK_LCTRL] && teclas[SDLK_RCTRL])
{
         puntos1++;
          puntos2++;
}


Me funciona teclas[SDLK_LCTRL] y teclas[SDLK_RCTRL] pero unidos no. A ver si me podéis ayudar o me decís otra manera para hacer lo que quiero.

Gracias.
RafaG
 
Mensajes: 20
Registrado: Lun Abr 05, 2010 10:57 am

Notapor Juanxo » Lun Abr 12, 2010 7:43 pm

buenas Rafa

Para lo que tu quieres no te es necesario la ultima comprobación, debido a como has hecho (correctamente) los dos primeros casos

Ten en cuenta que en caso de que se cumplan los dos a la vez, ya habrás entrado por los dos primeros if, por lo que ya habrás añadido correctamente los dos puntos.
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor RafaG » Mar Abr 13, 2010 5:57 pm

Ya se por qué no me detectaba las teclas combinadas, en mi juego uso la tecla Control, que es una tecla modificadora, por lo tanto, según he leido hay que usar una función especial:

Código: Seleccionar todo
SDLMod SDL_GetModState(void);

En lugar de:
Código: Seleccionar todo
SDL_GetKeyState(NULL);


En fín, ahora el problema es que si, por ejemplo, el jugador 1 mantiene su tecla apretada y el jugador 2 aprieta su tecla varias veces los puntos se les suman a los dos, algo injusto, creo que lo podré resolver solo, pero si se te ocurre alguna manera de arreglarlo dímelo.

Gracias.
RafaG
 
Mensajes: 20
Registrado: Lun Abr 05, 2010 10:57 am

Notapor Juanxo » Mié Abr 14, 2010 11:15 am

la manera que se me ocurre para evitar eso es no usar el pygame.key....., sino manejar los eventos y unicamente incrementar el marcador cuando se pulsa la tecla, es decir, la primera vez que baja, y no si se mantiene pulsada

ahora mismo no me acuerdo de como se hacia esto con pygame, pero creo que era algo de keydown y keyup o algo asi
Avatar de Usuario
Juanxo
 
Mensajes: 437
Registrado: Sab Ene 31, 2009 2:34 am
Ubicación: Madrid(España)

Notapor hugoruscitti » Jue Abr 15, 2010 3:21 am

RafaG escribió:En fín, ahora el problema es que si, por ejemplo, el jugador 1 mantiene su tecla apretada y el jugador 2 aprieta su tecla varias veces los puntos se les suman a los dos, algo injusto, creo que lo podré resolver solo, pero si se te ocurre alguna manera de arreglarlo dímelo.


Tal vez puedas solucionar el tema de la pulsacion de teclas
indicando a SDL que no admita repeticiones:

http://www.libsdl.org/cgi/docwiki.cgi/S ... eKeyRepeat

aunque no se si funciona con las teclas Control...
Avatar de Usuario
hugoruscitti
Site Admin
 
Mensajes: 1242
Registrado: Dom Jul 30, 2006 3:57 am
Ubicación: Buenos Aires, Argentina


Volver a Sobre las bibliotecas multimedia

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados

cron