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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Посимвольная обработка строк http://www.cyberforum.ru/cpp-beginners/thread714506.html
Помогите пожалуйста с решением этой задачи. Дана строка. Сформировать строку, содержащую все символы данной за исключение символов гласных букв. Заранее благодарю за помощь.
C++ VS2012/2010: создать консольное приложение x86 на x64 OS У меня win8 x64, собираю консольное приложение установив в свойствах проекта на вкладке общие установлено использовать MFC в статике (вместо использовать стандартные Windows библиотеки что стояло по умолчанию), после этого консольное приложение не использующее mfc внезапно стало x64. Что где поменять чтобы стало x86? У меня VS2012 но вкладки в свойствах проекта вроде с 2010 не менялись ... ... http://www.cyberforum.ru/cpp-beginners/thread714495.html
Установка locale (той которой от с++) C++
Как это правильно сделать? std::locale::global(std::locale("ru_RU.cp1251")); так получаю эксепшн. Компилятор gcc. Мне это необходимо потому что я обрабатываю строки с русским текстом и если в visual studio она там как-то автоматом устанавливает locale и собирает проект так что строки с русским текстом сравниваются нормально то в gcc же я так понимаю пока я не установлю locale правильно строки...
C++ Работа с строками. Вывести латинские символы
#include <iostream> #include <string> #include <cstdlib> #define size 81 using namespace std; int main() { //************************************* CP: cout << "\nChoose action (0-3): " << endl;
C++ Разработка программы содержащую функцию http://www.cyberforum.ru/cpp-beginners/thread714475.html
Нужно решить таким способом: При передаче параметров по адресу (или ссылке) в принимающую функцию передается адрес переменной-параметра. Поэтому принимающая функция получает доступ к ячейке памяти по этому адресу и может изменить исходное значение аргумента. Измененное значение сохраняется и после выхода из функции. Задача. Даны два вещественных числа А, В. Составить программу, содержащую...
C++ Считать строки с файла и поочередно вывести в консоль Доброго времени суток. Существует файл, строки в котором записаны таким образом: q1. 111 a1.1 111 a1.2 111+ a1.3 111 q3. 333 a3.1 333 a3.2 333+ подробнее

Показать сообщение отдельно
ohyou
2 / 2 / 1
Регистрация: 13.05.2012
Сообщений: 28

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

30.11.2012, 17:41. Просмотров 1152. Ответов 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'ом, потому работать будет криво, а у меня вообще не работало.

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

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

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