es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

glfwGetKeyName() devuelve null.

Actualmente estoy trabajando en el sistema de entrada de un motor de juego en Java, y uso GLFW para la ventana. Configuré un sistema de devolución de llamada para detectar cuando se presiona una tecla:

GLFW.glfwSetKeyCallback(window, (windowId, key, scancode, action, mods) -> {
    if (action == GLFW.GLFW_PRESS) {
        System.out.println(GLFW.glfwGetKeyName(key, scancode));
    }
});

El problema es que cuando presiono espacio, enter o shift más una tecla diferente, imprime null. Mi pregunta es: ¿cómo puedo usar el atributo mods para capitalizar la siguiente tecla cuando presiono shift o imprimir una nueva línea cuando presiono enter, etc.?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para utilizar el atributo mods para capitalizar la próxima tecla cuando se presiona Shift o imprimir una nueva línea cuando se presiona Enter, puedes modificar el código de la siguiente manera:

    GLFW.glfwSetKeyCallback(window, (windowId, key, scancode, action, mods) -> {
        if (action == GLFW.GLFW_PRESS) {
            String keyName = GLFW.glfwGetKeyName(key, scancode);
    
            if (keyName == null) {
                return;
            }
    
            if ((mods & GLFW.GLFW_MOD_SHIFT) != 0) { // Se presionó la tecla Shift
                keyName = keyName.toUpperCase();
            }
    
            if (key == GLFW.GLFW_KEY_ENTER) { // Se presionó la tecla Enter
                keyName = "\n";
            }
    
            System.out.println(keyName);
        }
    });
    

    Este código primero verifica si el nombre de la tecla no es null, y luego verifica si se presionó la tecla Shift mediante la comprobación del atributo mods con la constante GLFW_MOD_SHIFT. Si se presiona Shift, se capitaliza el nombre de la tecla utilizando el método toUpperCase() de la clase String. De manera similar, si se presiona la tecla Enter, se reemplaza el nombre de la tecla con un carácter de nueva línea. Finalmente, se imprime el nombre de la tecla modificado.

Comments are closed.