Я использую GLFW для 3D-графики. Я пытаюсь реализовать схему нормального движения, где WASD - горизонтальное движение, пространство вверх, а смещение вниз.
Все клавиши, кроме, возвращаются при нажатии, но дерьмо возвращается только один раз при нажатии и один раз при отпускании.
Это означает, что если я нажму и удерживаю пробел, я буду непрерывно двигаться вверх, пока не отпущу клавишу.
Но если я буду удерживать и нажимать Shift, я немного опущусь, и я остановлюсь и не буду двигаться, пока я не отпущу, а затем немного подвинусь.
Мой обратный вызов клавиш выглядит следующим образом (c - объект камеры):
#define CAM_SPEED 0.2f
void static key_callback(GLFWwindow* window, int key, int scancode, int action, int mods)
{
if(key == GLFW_KEY_W)
{
c.translateForward(CAM_SPEED);
}
if(key == GLFW_KEY_S)
{
c.translateForward(-CAM_SPEED);
}
if(key == GLFW_KEY_A)
{
c.translateSideways(-CAM_SPEED);
}
if(key == GLFW_KEY_D)
{
c.translateSideways(CAM_SPEED);
}
if(key == GLFW_KEY_SPACE)
{
c.translate(vec3(0,1,0)*CAM_SPEED);
}
if(key == GLFW_KEY_LEFT_SHIFT)
{
c.translate(vec3(0,-1,0)*CAM_SPEED);
}
}
Так что код для всех ключей в основном одинаков, поэтому я не понимаю, почему shift ведет себя по-разному.