• Miércoles 20 de Noviembre de 2024, 14:27

Autor Tema:  Recibir Entrada Del Teclado  (Leído 2290 veces)

hafid

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Recibir Entrada Del Teclado
« en: Lunes 6 de Febrero de 2006, 04:58 »
0
hola
he estado intentando programar un juego para ms-dos pero tengo problemas
al recibir entradas del teclado lo he hecho de diferentes maneras( bioskey(),
 kbhit(), getch(), ensamblador con la int 16h )pero en todas me topo con el mismo problema al pulsar una tecla cuando ya tenia pulsada otra, la anterior se desactiva y mi juego ya no sabe si sigue pulsada o no la primera tecla.

he pensado en utilizar alguna libreria como allegro pero por el momento mi objetivo es hacer el juego sin utilizar librerias especiales.
agradeceria mucho que alguien pudiera decirme como debo manejar el teclado para evitar eso.

tambien quisiera que mi juego no esperara a que una tecla se repita por tenerla pulsada ya que desde que pulsas tarda un poco en empezar a repetirse

actualmente utilizo una combinacion de kbhit() y bioskey()

gracias

bob esponja

  • Miembro MUY activo
  • ***
  • Mensajes: 411
    • Ver Perfil
    • http://marianoguerra.blogspot.com
Re: Recibir Entrada Del Teclado
« Respuesta #1 en: Lunes 6 de Febrero de 2006, 10:33 »
0
cuando presionas una tecla te viene un scancode por ejemplo la tecla arriba es 72, cuando una tecla se deja de apretar te viene el scancode de la tecla mas 128 en este caso 72 + 128, entonces lo que tenes que hacer es tener un array que tenga 0 si la tecla no esta apretada y 1 si la tecla esta apretada.
Asi sabes el valor de multiples teclas.

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Recibir Entrada Del Teclado
« Respuesta #2 en: Martes 7 de Febrero de 2006, 15:31 »
0
lo ideal es que uses la propia api de windows para ese fin o mejor aun que hagas uso de directX o similares pyues te ahorraran algo de trabajo.

Sin embargo para tu caso ´puedes hacer lo que te dice bob.

Yo haria algo similiar pero no igual..


1-segun el lenguaje que uses o las librerias que uses,  hereadria o implementaria una clase que me manejara un array a manera de cola ( primeros en entrar primeros en salir) .
2- la cola estaria implementada con objetos de tipo 'tecla'  estos objetos tipo tecla tienen un atributo de tiempo de vida
3- la clase que maneja el array tiene un metodo de verifica el tiempo de vida de cada uno de los objetos de la coleccion y si alguno ya supero el tiempo limite lo elimina del array

de esta manera tienes control de todo, y puedes saber cuando lo desees que teclas han sido presionadas en un intervalo de tiempo establecido ( muy util para juegos de pelea) , ademas puedes implementarle mas funcionalidades que te permitan establecer un maximo de objetos en el array o diferentes tipos de array segun lo que quieras hacer.

Esta funcionalidad como la explique , es la que usa directX , bueno no una version tan simple de hecho es mucho mas elaborada, pero como te dije funciona para lo basico.
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

Amilius

  • Miembro HIPER activo
  • ****
  • Mensajes: 665
    • Ver Perfil
Re: Recibir Entrada Del Teclado
« Respuesta #3 en: Martes 7 de Febrero de 2006, 17:08 »
0
Hay un detalle con todos los teclados estandar: si estas presionando unas cuatro teclas o cinco y presionas otra, ya no detecta que presionaste la ultima, no existe ningun evento que informe de ese detalle, eso es facil de verificar mostrando la matriz de teclas en pantalla, esto varia dependiendo de la combinacion de teclas, pero en general con muchas combinaciones de varias teclas presionadas al mismo tiempo al presioanar otra ya no genera un evento ni nada. Esto es bastante perjudicial si piensas hacer un juego para 2 personas usando un solo teclado. Ej. Mortal Kombat

JuanK

  • Miembro de ORO
  • ******
  • Mensajes: 5393
  • Nacionalidad: co
    • Ver Perfil
    • http://juank.io
Re: Recibir Entrada Del Teclado
« Respuesta #4 en: Martes 7 de Febrero de 2006, 17:27 »
0
:unsure:
ahora que releo la pergunta veo que la entendi mal...
no habla de saber las teclas presioandas sino de saber las teclas presionadas al tiempo sorry  :blink:
[size=109]Juan Carlos Ruiz Pacheco
[/size]
Microsoft Technical Evangelist
@JuanKRuiz
http://juank.io

hafid

  • Nuevo Miembro
  • *
  • Mensajes: 2
    • Ver Perfil
Re: Recibir Entrada Del Teclado
« Respuesta #5 en: Miércoles 8 de Febrero de 2006, 19:31 »
0
gracias juan_k de todos modos eso me da una idea para manejar mejor la entrada
del teclado lo cual tampoco lo estaba haciendo muy bien,

y lo que dice  bob esponja creo que me ayudaria a solucionar mi problema
lo unico que nesesito es averiguar como recibo un scan y luego el otro +128
por que con bioskey creo que no es posible, estoy pensando en revisar directamente el bufer del teclado que creo que seria la mejor solucion.

si hay otra mejor porfa denme una pista

gracias