Обработка ввода нескольких клавиш одновременно с GLFWC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Обработка ввода нескольких клавиш одновременно с GLFW

Сообщение Anonymous »

Я пытаюсь создать основное движение камеры с помощью функции GLFWSetKeyCallback. Проблема в том, что он не обрабатывает ввод нескольких клавиш одновременно, например, W и A должен переместить его по диагональному верхнему левому направлению. Вместо этого он действует как знание только о последнем ключе. Итак, допустим, я нажимаю, чтобы перемещаться влево, он уходит влево, затем я нажимаю, чтобы перейти по диагонали в верхнем левом, вместо этого он «забывает» о том, что его нажимают и поднимаются вверх. < /P>

Код: Выделить всё

float cameraSpeed = 0.02f;
if (key == GLFW_KEY_ESCAPE && (action == GLFW_PRESS || action == GLFW_REPEAT))
glfwSetWindowShouldClose(window, GLFW_TRUE);
if (key == GLFW_KEY_W && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraY += cameraSpeed;
if (key == GLFW_KEY_A && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraX -= cameraSpeed;
if (key == GLFW_KEY_S && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraY -= cameraSpeed;
if (key == GLFW_KEY_D && (action == GLFW_PRESS || action == GLFW_REPEAT))
Game::GetInstance()->cameraX += cameraSpeed;
< /code>

Единое решение, которое вошло в мою мысль, было похоже на создание моей собственной логической вкладки ввода клавиатуры и использовать функцию GLFW только для их установки, например: < /p>

if (key == GLFW_KEY_A && action == GLFW_PRESS)
// set 'A' to true;
if (key == GLFW_KEY_A && action == GLFW_RELEASE)
// set 'A' to false;
, а затем делайте то, что я хочу с ним в совершенно отдельной функции/класс/что угодно. Хотя это не кажется мне чистым. Что такое хорошее решение проблемы?

Подробнее здесь: https://stackoverflow.com/questions/466 ... -with-glfw
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»