Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какая фунция вернёт, нажатую клавишу? 
V
    Опции темы
Rickert
  Дата 20.6.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Функция GetKeyState проверяет нажата ли конкретная клавиша. У меня есть список клавиш и соответствующие им функции. Пока что всё реализованно тупо: при каждой отрисовке экрана в OpenGL, проверяется нажаты ли определённые клавиши, с помощью GetKeyState. Но это не есть гуд, потому что выполняется много ненужных функций по проверке. Вопрос: какая функция вернёт мне нажатые в данный момент клавиши, если таковые имеются?
Ловить WM_KEYDOWN предлогать не надо, потому что он тормозной. Мне по нажатию клавиши, допустим, надо двигать камеру. Если я реализовывую через сообщения - то камера движется рывками и этом заметно, а если реализовывать сравнение в каждом кадре при отрисовке - то всё плавно.
По хорошему конечно надо делать функцию движения нормальную, а не тупое приращение координат, но всё-таки пока так, так что вопрос: какая функция вернёт нажатые в данный момент клавиши? smile 


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
586
Дата 20.6.2008, 16:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2243
Регистрация: 8.5.2006

Репутация: 39
Всего: 146



Цитата(Rickert @  20.6.2008,  16:16 Найти цитируемый пост)
Ловить WM_KEYDOWN предлогать не надо, потому что он тормозной. Мне по нажатию клавиши, допустим, надо двигать камеру. Если я реализовывую через сообщения - то камера движется рывками и этом заметно, а если реализовывать сравнение в каждом кадре при отрисовке - то всё плавно.

В таком коде рывков быть не должно (писал по памяти из уроков NeHe):
Код
bool keys[256] = {0};

LRESULT CALLBACK WndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
    switch(uMsg)
    {
    case WM_KEYDOWN:
         if((lParam & (1<<30) == 0) keys[wParam & 0xFF] = true;
         break;

    case WM_KEYUP:
        keys[wParam & 0xFF] = false;
        break;
}

void RenderScene()
{
    if(keys[VK_UP]) {
         // ..
    }
    if(keys[VK_DOWN]) {
        // ....
    }
}


По сабжу:
Цитата
какая функция вернёт нажатые в данный момент клавиши? 

GetKeyboardState
PM   Вверх
Rickert
Дата 4.10.2008, 09:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ситхи не пройдут!
****


Профиль
Группа: Комодератор
Сообщений: 3356
Регистрация: 11.7.2006
Где: Лакрима

Репутация: нет
Всего: 52



Мерси, проверим!


--------------------
Ни что не внушает сна крепче, чем день приисполненный трудов!
PM MAIL WWW Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0428 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.