Форум программистов, компьютерный форум CyberForum.ru

Обработка нажатий клавиш с glfw - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
ohyou
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 28
30.11.2012, 17:41     Обработка нажатий клавиш с glfw #1
Изучаю glfw.
Задался вопросом обработки нажатий клавиш.
Нашел функцию glfwGetKey(int key), где int key - номер клавиши по какому-то там ISO стандарту, который меня сейчас не интересует.
К этой функции есть аргументы, отвечающие за некоторые клавиши.
Допустим, возьмем GLFW_KEY_RIGHT (стрелочка вправо), тогда функция будет выглядеть так: glfwGetKey(GLFW_KEY_RIGHT).
Функция возвращает 1 (true), если клавиша зажата, и возвращает 0 (false), если клавиша разжата.

То есть, функция не регистрирует само нажатие, она регистрирует зажатость и отжатость.
Из-за этого, допустим, используя следующий кусок кода:
C++
1
2
int x = 0;
if (glfwGetKey(GLFW_KEY_RIGHT)) { x++ }
Мы получим, что после обычного нажатия х стало равно ~40.

Я так понял, это из-за того, что основной цикл обрабатывает вещи не покадрово, а с какой-то бешеной скоростью.
Я попытался тормознуть цикл, забирая время при помощи glfwGetTime(), и высчитывая время до следующего фрейма (1 секунда), и прибавляя к этому значению 1 / (ожидаемое количество фпс), тоесть, фактически, замедляя ожидание на это время. Реализовал так:
C++
1
2
while (glfwGetTime() < nextframetime) { }
nextframetime = glfwGetTime() + 1.0f/60.0f;
Фпс теперь 60, да, но при нажатии клавиши, x всё равно растет слишком быстро. Пробовал даже оставить 1 фпс - не помогло, хоть и костыль.
Еще пробовал использовать glfwWaitForEvents, но ведь даже банальное движение мышкой внутри окна уже является event'ом, потому работать будет криво, а у меня вообще не работало.

Далее я решил, что для этого нужно писать какой-то обработчик нажатий. Но я без понятия, как его реализовать.

Конкретно нужно: сделать так, чтобы при нажатии клавиши, отвечающей за какое-то действие, оно выполнялось один раз, а не столько, сколько способен выжать мой процессор.

Пытался гуглить, так и не смог найти решений.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.11.2012, 17:41     Обработка нажатий клавиш с glfw
Посмотрите здесь:

подсчет и перехват нажатий клавиш. C++
обработка нажатия клавиш win32 console application C++
Эмуляция нажатий клавиш клавиатуры C++
C++ Обработка клавиш!
C++ Отлов нажатий клавиш в системе и отправка на email
C++ Эмуляция нажатий клавиш или автоматический ввод информации
Обработка нажатия клавиш OPENGL C++
C++ Пятнашки - Как сделать перехват нажатий клавиш в консоли

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ohyou
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 28
01.12.2012, 18:46  [ТС]     Обработка нажатий клавиш с glfw #2
Вверх.
Хоть кто-нибудь имеет хоть какие-нибудь идеи?
Vovander
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 3
03.08.2014, 22:56     Обработка нажатий клавиш с glfw #3
Вот еще костыль:
http://ehc.ac/p/glfw/discussion/247562/thread/8f3df980/
Yandex
Объявления
03.08.2014, 22:56     Обработка нажатий клавиш с glfw
Ответ Создать тему
Опции темы

Текущее время: 16:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru