Entrada del teclado [SDL]

thyma2 Mensajes publicados 21 Estado Miembro -  
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   -
Hola,

Estoy trabajando en un proyecto que utiliza la biblioteca SDL.
He creado una función que recupera las entradas del teclado del usuario.
Sin embargo, no todas las entradas del teclado funcionan.
Los caracteres que puedo activar con una sola tecla funcionan (por ejemplo, a, b, c, d...),
pero para todos los caracteres que requieren una combinación de teclas no funciona (por ejemplo, 1, 2, 3...)
porque mi teclado no tiene teclas dedicadas para los números, tengo que presionar & y mayúsculas al mismo tiempo para hacer 1.

Bueno, podría detectar los caracteres especiales y la tecla mayúsculas y activar la letra solo si ambas teclas están presionadas. Pero eso es una mala idea porque si el teclado no está en el mismo idioma, no funcionará. Además, la documentación de SDL se basa en el teclado en inglés y no se puede encontrar el carácter é o è.

Para recuperar las entradas, utilizo las funciones keyup y keydown de SDL.

Eso es. Pueden pedirme que aclare mi problema, por supuesto.
¡Que tengas un buen día!

3 respuestas

  1. [Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
     
    Hola thyma2,

    No hay funciones keyup y keydown en SDL2.

    Creo que hablas de los tipos de eventos SDL_KEYUP y SDL_KEYDOWN en una unión SDL_Event que se obtiene con la función SDL_PollEvent() y del scancode o keycode recuperado(s) vía los campos key, luego keysym.

    En cualquier caso, este método se utiliza normalmente para recuperar información sobre las teclas presionadas (más que sobre los caracteres ingresados), típicamente para construir una interfaz con el usuario que permita al programa reaccionar a la presión de una tecla.

    Para recuperar texto ingresado, deberías interesarte en el tipo de eventos SDL_TEXTINPUT, que recuperará el texto ingresado en utf8.

    https://wiki.libsdl.org/Tutorials/TextInput

    Dal
    1
  2. thyma2 Mensajes publicados 21 Estado Miembro 2
     
    Hola
    gracias por tu respuesta
    intenté usar esta función en lugar de las que había creado.
    pero tengo un error en la compilación undefined reference to function sdl TextInput
    es extraño porque incluí bien sdl y las otras funciones sdl funcionan.
    quizás sea porque estoy usando arch linux y no windows?
    0
  3. thyma2 Mensajes publicados 21 Estado Miembro 2
     
    Re - hola
    sí, estuve en sdl1, y esta función solo existe en sdl2
    pero como la necesito, estoy migrando a sdl2 (es molesto, hay que rehacer muchas cosas)
    regresarè esta noche o mañana para decir si este método funciona en sdl2.
    0
    1. [Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
       
      Sí, es para sdl2.

      En sdl 1.2 tenías SDL_EnableUNICODE() para configurar sdl con el fin de obtener el carácter unicode asociado a la tecla presionada.

      Tienes ejemplos en el sitio de Lazy Foo http://lazyfoo.net/SDL_tutorials/lesson23/index.php (es en C++).

      Pero eso no funcionaba bien por varias razones (ve https://wiki.libsdl.org/MigrationGuide?highlight=%28SDL_EnableUNICODE%29) y fue descartado en sdl2, que crea un tipo de evento y procesos diferentes para manejar la entrada en utf8, distintos de los de manejo de teclas.

      Antes de migrar todo tu código a sdl2, solo haz un corto programa de prueba en sdl2 utilizando como base el código del tutorial.

      Si estás en Linux, tu consola debería ser capaz de mostrar los caracteres utf8 con un simple printf(). También puedes mostrar la cadena utf8 recuperada en una ventana sdl con SDL_ttf en forma de una superficie con TTF_RenderUTF8_Solid() o guardarla en un archivo y abrirla con un editor que soporte utf8 (lo cual no debería ser un problema en Linux).
      0