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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
ohyou
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 28
#1

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

30.11.2012, 17:41. Просмотров 1160. Ответов 2
Метки нет (Все метки)

Изучаю 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++):

Подсчет и перехват нажатий клавиш - C++
Всем привет! Вот недавно попытался создать счетчика нажатий кнопок, но он очень нестабилен. Создал я его так: 1) создал winforms в vc++...

Эмуляция нажатий клавиш клавиатуры - C++
Посоветуйте, как можно реализовать управление программой (которая управляется с клавиатуры (например игра Quake)) из другой программы...

Отлов нажатий клавиш в системе и отправка на email - C++
Всем доброе время суток. Ребята нужна помощь... нада зделать клавиатурный шпион.. но так чтоб он присилал дание по майлу... тоисть с...

Пятнашки - Как сделать перехват нажатий клавиш в консоли - C++
Собственно есть реализация игры &quot;Пятнашки&quot; wasd и 4862 - управление (оно организовано через передвижение пустой фишки). Пока надо...

Эмуляция нажатий клавиш или автоматический ввод информации - C++
Добрый день. Мне необходимо чтобы в определенную форму ввелся пароль. Форма является изначально активной, то есть фокус находится на ней....

Обработка клавиш! - C++
кароче не могу написать программу в консоле каторая, если нажата клавиша space то выводится сообщение что клавиша нажата!, а если опущена...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ohyou
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 28
01.12.2012, 18:46  [ТС] #2
Вверх.
Хоть кто-нибудь имеет хоть какие-нибудь идеи?
Vovander
0 / 0 / 0
Регистрация: 15.07.2014
Сообщений: 3
03.08.2014, 22:56 #3
Вот еще костыль:
http://ehc.ac/p/glfw/discussion/247562/thread/8f3df980/
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.08.2014, 22:56
Привет! Вот еще темы с ответами:

Обработка нажатия клавиш - C++
Здравствуйте! Необходимо решить следующую задачу: Есть консольное приложение, которое разрабатывается с использованием C++, с...

Обработка нажатия клавиш-стрелок - C++
Добрый вечер, я делаю пошаговую демонстрационную программу различных методов сортировок в консоли, но не знаю как сделать так, чтобы при...

Обработка нажатия клавиш OPENGL - C++
Привет! Столкнулся с такой проблемой, что для opengl, если пользуемся glutspecialfunc( для обработки нажатия клавиш), то коды клавиш ...

Отслеживание нажатий клавиш, когда окно программы не в фокусе - C++
Доброго времени суток, цель - написать программу, выполняющую код функции (напишу самостоятельно) по нажатию клавиши. Функций должно быть...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru