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

Как считать многочисленное нажатия одновременно - C++

Восстановить пароль Регистрация
 
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 300
17.02.2014, 22:20     Как считать многочисленное нажатия одновременно #1
как считать многочисленное нажатия одновременно например(w+d+b)
getch() не помогает или я не все о нем знаю
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 22:20     Как считать многочисленное нажатия одновременно
Посмотрите здесь:

Как сделать что бы 2 функции работали одновременно C++
C++ Как удержать более пяти клавиш одновременно?
Как одновременно декларировать векторное и скалярное произведение векторов? C++
C++ Как выполнить циклы одновременно?
C++ Класс для работы с секундомером (считать секунды до нажатия клавиши, результат переводить в минуты и часы)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
17.02.2014, 22:30     Как считать многочисленное нажатия одновременно #2
Не понял вопрос вообще
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
17.02.2014, 22:37     Как считать многочисленное нажатия одновременно #3
GetAsyncKeyState, не?
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 300
17.02.2014, 22:38  [ТС]     Как считать многочисленное нажатия одновременно #4
(для тех кому не понятно) делают игру нужно принять клавиши одновременно наприклад зажать клавиши w и d при этом нажимать клавишу b
Kuzia domovenok
 Аватар для Kuzia domovenok
1883 / 1738 / 116
Регистрация: 25.03.2012
Сообщений: 5,907
Записей в блоге: 1
17.02.2014, 22:50     Как считать многочисленное нажатия одновременно #5
user-men, мне-то как раз всё понятно. К тому же, "делать игру" можно множеством средств!
Ну например, GetAsyncKeyState это раз.
Или ещё: имеется в твоей программе окно, цикл обработки сообщений и оконная функция? Если да, то обрабатывай сообщения WM_KEYUP/WM_KEYDOWN
А может ты используешь DirectInput?
А может glutKeyboardFunc?
А может используешь Qt?
А может SFML?
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 300
31.07.2014, 02:14  [ТС]     Как считать многочисленное нажатия одновременно #6
Цитата Сообщение от Kuzia domovenok Посмотреть сообщение
glutKeyboardFunc
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <GL/glut.h>
 
int Yb = 500, Xb = 500;
 
void dis()
{
    glClear(GL_COLOR_BUFFER_BIT); 
    glColor3f(0.6,0.7,0);
    glBegin(GL_QUAD_STRIP);
    glVertex2f(Yb,Xb+100);
    glVertex2f(Yb, Xb);
    glVertex2f(Yb + 100, Xb+100);
    glVertex2f(Yb+100, Xb);
    glEnd();
    glutSwapBuffers(); 
}
 
void KeyWord1(unsigned char key,int x, int y)
{
    switch (key)
    {
    case 'w':Xb += 20; break;
    case 's':Xb -= 20; break;
    case 'a':Yb -= 20; break;
    case 'd':Yb += 20; break;
    }
    glutPostRedisplay();
}
 
void KeyApp(int key, int x, int y)
{
    switch (key)
    {
    case GLUT_KEY_UP:Xb+=20; break;
    case GLUT_KEY_DOWN:Xb-=20; break;
    case GLUT_KEY_LEFT:Yb-=20; break;
    case GLUT_KEY_RIGHT:Yb+=20; break;
    }
    glutPostRedisplay();
}
 
int main(int argcp,char **argv)
{
    glutInit(&argcp, argv);
    glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB);
    glutInitWindowPosition(150, 0);
    glutInitWindowSize(400, 400);
    glutCreateWindow("Project 1"); 
    glutDisplayFunc(dis); 
    glutKeyboardFunc(KeyWord1);
    glutSpecialFunc(KeyApp);
    glClearColor(1, 1, 1, 0);  
    glMatrixMode(GL_PROJECTION); 
    glLoadIdentity();
    glOrtho(-1, 1000, -1, 1000, -100, 100); 
    glMatrixMode(GL_MODELVIEW);
    glutMainLoop();
    return 0;
}
Я использовал функцию glutKeyboardFunc но почему у меня квадрат в сторону не идет когда я нажимаю 'a' + 'w' Что не так?
zss
Модератор
Эксперт С++
 Аватар для zss
5950 / 5555 / 1786
Регистрация: 18.12.2011
Сообщений: 14,195
Завершенные тесты: 1
31.07.2014, 08:33     Как считать многочисленное нажатия одновременно #7
Мне кажется, клавиатура не умеет отрабатывать одновременное нажатие клавиш
кроме Alt и Ctrl.
В Win32 при нажатии клавиши посылается сообщение WM_CHAR
wParam
Specifies the character code of the key.
lParam
Specifies the repeat count, scan code, extended-key flag, context code, previous key-state flag, and transition-state flag, as shown in the following table.
0-15
Specifies the repeat count for the current message. The value is the number of times the keystroke is autorepeated as a result of the user holding down the key. If the keystroke is held long enough, multiple messages are sent. However, the repeat count is not cumulative.
16-23
Specifies the scan code. The value depends on the OEM.
24
Specifies whether the key is an extended key, such as the right-hand ALT and CTRL keys that appear on an enhanced 101- or 102-key keyboard. The value is 1 if it is an extended key; otherwise, it is 0.
25-28
Reserved; do not use.
29
Specifies the context code. The value is 1 if the ALT key is held down while the key is pressed; otherwise, the value is 0.
30
Specifies the previous key state. The value is 1 if the key is down before the message is sent, or it is 0 if the key is up.
31
Specifies the transition state. The value is 1 if the key is being released, or it is 0 if the key is being pressed.
Т.е wparam содержит код нажатой клавиши.
29 бит lparam - одновременно удерживается Alt
Если 24 бит единица, то нажат либо Alt, либо Ctrl

А с помощью битов 30 и 31 похоже можно отследить порядок нажатия и отпускания клавиш.
Поэкспериментируйте.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
31.07.2014, 11:25     Как считать многочисленное нажатия одновременно #8
Обычно клавиатура может обработать как минимум два нажатия. WM_CHAR тут вряд ли поможет, скорее GetKeyboardState - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
krv
71 / 51 / 11
Регистрация: 10.07.2014
Сообщений: 328
31.07.2014, 12:09     Как считать многочисленное нажатия одновременно #9
Тут еще и от клавиатуры зависит.
Код писал давно, под дос и на прерываниях, поэтому не повторю сейчас, но еще тогда заметил - получалось не более 5 одновременно нажатых клавиш.. Причем после подключения физически другой клавы - менялось количество
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2014, 12:16     Как считать многочисленное нажатия одновременно
Еще ссылки по теме:

C++ Как реализовать ввод и чисел и символов одновременно?
Два и больше действия одновременно, как реализовать? C++
Как считать из файла символы и цифры одновременно? Структуры C++

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

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
31.07.2014, 12:16     Как считать многочисленное нажатия одновременно #10
Да, я тоже это замечал. Видимо зависит от контроллера клавиатуры.
Yandex
Объявления
31.07.2014, 12:16     Как считать многочисленное нажатия одновременно
Ответ Создать тему
Опции темы

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