glfwSetKeyCallback () из GLFW не вызывается постоянно во время нажатия клавиши - PullRequest
1 голос
/ 06 марта 2019

Я пытаюсь заставить мою игру что-то делать, когда я нажимаю клавишу. Я использую GLFW для обработки Windows API для меня. Я застрял и запутался, когда использовал функцию обратного вызова в заголовке.

Ссылочный документ: https://www.glfw.org/docs/latest/input_guide.html#input_keyboard

Я следовал за ресурсами «Ввод ключа» (не «Ввод текста»), но я получаю своего рода кривую обратного вызова для ввода текста, например, когда я продолжаю нажимать клавишу, я получаю событие нажатия клавиши, затем оно останавливается на некоторое время, и тогда я получаю повторяющиеся события. Разве обратные вызовы не должны быть постоянными во времени (без этого промежутка времени)? Это мой код:

void onKeyPress(GLFWwindow* window, int key, int scancode, int action, int mods)
{
    if (key == GLFW_KEY_W && action != GLFW_RELEASE)
    {
        camera.pos += glm::vec3(0.0f, 0.0f, 1.0f);
        updateCameraMatrices();
    }
}

// ...

glfwSetKeyCallback(window, onKeyPress);

Ответы [ 2 ]

2 голосов
/ 06 марта 2019

Nvm. Кажется, мои ожидания были неверными. Я должен просто прослушать GLFW_PRESS и GLFW_RELEASE, сохранить статус ключа и использовать if (status) в моем основном цикле.

0 голосов
/ 06 марта 2019

Нет необходимости использовать обратные вызовы событий, если вы просто хотите знать, нажата клавиша или нет.Просто используйте glfwGetKey(window,key), чтобы получить текущий статус ключа (это возвращает GLFW_PRESS или GLFW_RELEASE).Подробнее см. здесь .

...