Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Detectar Varias Teclas Simultaneas

Iniciado por Vivael13h, 21 de Marzo de 2005, 02:00:57 PM

« anterior - próximo »

Vivael13h

 Hola a todos.

Me he puesto a revisar un juego de naves que hice hace tiempo con DirectX 8, porque le quería hacer funcionar con un joystick, como ya comenté en otro post. El caso es que me he dado cuenta de un curioso efecto del que no me había dado cuenta hasta ahora, y que me pasa también en otros juegos, y es que hay una diagonal que no me funciona. Me explico:

El código que tengo para manejar el teclado es muy sencillo: hago una llamada a GetKeyboarState, y copio el estado de las 256 teclas de windows en un array BYTE teclado[256]. Y luego compruebo si están pulsadas las teclas del juego: si está pulsada la flecha abajo, aumento la coordenada Y de la nave, si se pulsa espacio creo un disparo, etc. Funciona siempre, menos con la diagonal abajo-izquierda, y esto ya me supera.

En todos los demás casos funciona, que es lo que me extraña. Si pulso a la vez las flechas arriba y derecha (o cualquier otra diagonal) y el disparo, la nave se mueve en esa dirección y dispara a la vez. Pero si pulso flecha abajo y flecha izquierda y disparo, la nave se mueve, pero no dispara.

No se, igual es una chorrada, pero se me ha ocurrido que tal vez justo esta diagonal se lea de una manera distinta. ¿Por qué pasa esto?
lgún día volverá el 13h

Lord Trancos 2

 Me temo que lo que te pasa es..... "normal".

Usa otra tecla que no se espacio. (Control por ejemplo)
on los años y mucho esfuerzo he llegado a atesorar una ignorancia total sobre casi todas las cosas.
Gate to Avalon (mi Blog)

fiero

 Puedes usar esta macro para detectar las pulsaciones, y utilizar las constantes VK_ para detectar cualquier tecla:

#define TeclaPulsada(key) (GetAsyncKeyState(key) & 0x8000)

luego en el bucle del juego pones:

if(TeclaPulsada(VK_LEFT)) ...

if(TeclaPulsada(VK_UP))...


un saludo

PD: bueno, igual es lo mismo que tienes tu...
www.videopanoramas.com Videopanoramas 3D player

samsaga2

 Pero esto ya pasaba desde mis timpos de MSX :-P creo que es mas un problema de hardware que no del sistema operativo. Tal y como funcionan los teclados (no soy ningun experto en el tema) hay ciertas combinaciones de teclas que no se pueden detectar. Ocurre sobretodo cuando las teclas estan en la misma fila.

Un ejemplo cutre:

- Pulso la A y la S a la vez: as
- Pulso la A, S y D a la vez: asd
- Pulso A, S, D y F a la vez: no sale nada :)

Vivael13h

 fiero, efectivamente así es como lo hago.

He hecho pruebas y funciona al cambiar la tecla de disparo. Poniendo por ejemplo el tabulador, dispara que se mata.

En fin, qué cosas tiene la ciencia...

Y ya por curiosidad, ¿Por qué se supone que pasa esto?.
lgún día volverá el 13h

sés

 Eso siempre ha ocurrido.
Lamentablemente cada teclado es diferente y la única solución es dejar que el usuario redefina las teclas con una combinación que no le dé problemas.

Yo siempre he jugado a lso juegos de lucha con teclas y... claro, en algunos hay que pulsar varias a la vez. Con algunas combinaciones simplemente no puedes estar cubriéndote agachado e intentar dar una patada. O das patadas o te cubres, elige :P

Con el X-Arcade no hay ese problema. El que no lo conozca dirá "pero si es un joystick". Pues... tiene razón ^_^, pero no es un joystick normal.
Este joystick (por defecto) se conecta al teclado y cada botón se limita a simular la pulsación de la tecla que se elija (sistema "simple" donde los haya que lo convierten en un joystick multisistema). Si solo simula pulsaciones de teclas, es de suponer que debería tener el mismo problema, pero no es así.

Esto me hace preguntarme algo: ¿por qué no hay teclados que eviten ese problema como hace el X-Arcade? A saber. ¿Algún electrónico en la sala? ^_^
Soy indeciso... ¿o no?

_Grey

 
CitarEsto me hace preguntarme algo: ¿por qué no hay teclados que eviten ese problema como hace el X-Arcade? A saber. ¿Algún electrónico en la sala?

Buena pregunta, hace no mucho que pensaba en esto, y digo yo que si el problema es irresoluble con los teclados "normales" podrian hacer teclados USB como con los ratones y punto.

CitarPero esto ya pasaba desde mis timpos de MSX :-P creo que es mas un problema de hardware que no del sistema operativo

Que yo recuerde en el MSX no tenia interferencia ninguna con la barra espaciadora y los cursores, me di cuenta del problema cuando pase al PC, despues de un tiempo sospechando del porque usar CTRL en lugar de SPACE.

Saludos.

samsaga2

Cita de: "_Grey"
CitarEsto me hace preguntarme algo: ¿por qué no hay teclados que eviten ese problema como hace el X-Arcade? A saber. ¿Algún electrónico en la sala?

Buena pregunta, hace no mucho que pensaba en esto, y digo yo que si el problema es irresoluble con los teclados "normales" podrian hacer teclados USB como con los ratones y punto.

CitarPero esto ya pasaba desde mis timpos de MSX :-P creo que es mas un problema de hardware que no del sistema operativo

Que yo recuerde en el MSX no tenia interferencia ninguna con la barra espaciadora y los cursores, me di cuenta del problema cuando pase al PC, despues de un tiempo sospechando del porque usar CTRL en lugar de SPACE.

Saludos.
A mi me pasaba en el MSX jugando a dobles con el salamander, dos tios jugando en un mismo teclado son MUCHAS teclas a la vez.

egf

 el orden en el que pones los if para detectar la presion de las teclas es lo que marca esos problemas

Sacrifai

Cita de: "egf"el orden en el que pones los if para detectar la presion de las teclas es lo que marca esos problemas
Generalmente cualquier combinación da problemas.

La verdad es que a mi no me mola nada el metodo del ansykey o como se escriba  :rolleyes: . Si estás usando alguna libreria de juegos casi seguro trae algo para keys. Si no tambien puedes usar ( http://www.n-son.com/scripts/keyLib/ - no la he probado pero tiene buena pinta ). Recuerda usar arrays para esta ardua tarea  :) .

sés

Cita de: "egf"el orden en el que pones los if para detectar la presion de las teclas es lo que marca esos problemas
(ses) ¿ein?
Eso no tiene nada que ver.
Soy indeciso... ¿o no?

ShAq

Cita de: "Sacrifai"Si estás usando alguna libreria de juegos casi seguro trae algo para keys. Si no tambien puedes usar ( http://www.n-son.com/scripts/keyLib/ - no la he probado pero tiene buena pinta ). Recuerda usar arrays para esta ardua tarea  :) .
pero esa libreria no es para javascript  (uoh)  

Sacrifai

Cita de: "ShAq"
Cita de: "Sacrifai"Si estás usando alguna libreria de juegos casi seguro trae algo para keys. Si no tambien puedes usar ( http://www.n-son.com/scripts/keyLib/ - no la he probado pero tiene buena pinta ). Recuerda usar arrays para esta ardua tarea  :) .
pero esa libreria no es para javascript  (uoh)
No se, vi la pagina tan bonita  :rolleyes:  .


PD: Era un simple ejemplo  :lol:  .



(rules)     <_<  

[EX3]

 Ahora que comentais el tema me estoy acordando de cuando jugabamos 4 personas en el mismo teclado (si si, 4 personas  (uoh) ) a una version del juego de motos de luz de la mitica pelicula Tron, el juego en cuestion GL_Tron, el player 1 si pulsaba 4 teclas simultaneas, las que fuese, bloqueaba al resto de jugadores impidiendo que estos pudiesen controlar sus motos, era toda una cabronada (twist)

Salu2...
José Miguel Sánchez Fernández
.NET Developer | Game Programmer | Unity Developer

Blog | Game Portfolio | LinkedIn | Twitter | Itch.io | Gamejolt

egf

 el orden en que esta escrito un codigo puede variar el resultado  






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.