Да.glfwGetKey
предназначен для непрерывного клавишного ввода. Руководство GLFW перечисляет glfwSetKeyCallback
в качестве лучшей альтернативы, если вы хотите одноразовое уведомление о нажатии клавиши.
Таким образом, для вашего случая это будет что-то вроде этого:
void key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if (key == GLFW_KEY_SPACE && action == GLFW_PRESS)
show = !show;
}
Если вы не хотите использовать этот метод по какой-либо причине, вы всегда можете реализовать подобное самостоятельно.Вам понадобится логическое значение (или массив значений), представляющее состояние ключа.Затем при обработке ввода вы должны реагировать только на изменение состояния кнопки, например:
bool spacePressed;
// in handling
bool spaceCurrentlyPressed = glfwGetKey(window, GLFW_KEY_SPACE) == GLFW_PRESS;
if (!spacePressed && spaceCurrentlyPressed) { // wasn't before, is now
show = !show;
}
spacePressed = spaceCurrentlyPressed;