С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
#1

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

17.02.2014, 22:20. Просмотров 469. Ответов 9
Метки нет (Все метки)

как считать многочисленное нажатия одновременно например(w+d+b)
getch() не помогает или я не все о нем знаю
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.02.2014, 22:20
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как считать многочисленное нажатия одновременно (C++):

Как считать из файла символы и цифры одновременно? Структуры - C++
Имеется файл txt с таким заполнением: Gingi 25 12 1 Klinl 36 74 1 Frogo 963 32 2 Hlolo 69 85 1 Frodo 369 42 2 Ringo 951 43 1 ...

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

Как считать определённое количество цифр заданного числа (считать число до заданной цифры)? - C++
как считать число 12345 до символа 5? То есть 1234 присвоить другой переменной?.:wall:

Как выполнить циклы одновременно? - C++
Здраствуйте программисты я работаю над маленьким проектом разделения в трехфазном сепараторе.Все почти уже закончил.Только возникла...

Как открыть файл одновременно и на чтение и на запись? - C++
Вот такой код: #include <iostream> #include <fstream> #include <iomanip> #include<cstdlib> using namespace std; int...

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

9
vovacreme
-16 / 61 / 13
Регистрация: 14.01.2014
Сообщений: 145
17.02.2014, 22:30 #2
Не понял вопрос вообще
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,578
Записей в блоге: 1
17.02.2014, 22:37 #3
GetAsyncKeyState, не?
1
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
17.02.2014, 22:38  [ТС] #4
(для тех кому не понятно) делают игру нужно принять клавиши одновременно наприклад зажать клавиши w и d при этом нажимать клавишу b
0
Kuzia domovenok
2078 / 1907 / 176
Регистрация: 25.03.2012
Сообщений: 6,578
Записей в блоге: 1
17.02.2014, 22:50 #5
user-men, мне-то как раз всё понятно. К тому же, "делать игру" можно множеством средств!
Ну например, GetAsyncKeyState это раз.
Или ещё: имеется в твоей программе окно, цикл обработки сообщений и оконная функция? Если да, то обрабатывай сообщения WM_KEYUP/WM_KEYDOWN
А может ты используешь DirectInput?
А может glutKeyboardFunc?
А может используешь Qt?
А может SFML?
1
user-men
22 / 22 / 8
Регистрация: 17.02.2014
Сообщений: 307
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' Что не так?
0
zss
Модератор
Эксперт С++
6590 / 6152 / 2026
Регистрация: 18.12.2011
Сообщений: 16,041
Завершенные тесты: 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 похоже можно отследить порядок нажатия и отпускания клавиш.
Поэкспериментируйте.
1
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
31.07.2014, 11:25 #8
Обычно клавиатура может обработать как минимум два нажатия. WM_CHAR тут вряд ли поможет, скорее GetKeyboardState - http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
1
krv
74 / 54 / 11
Регистрация: 10.07.2014
Сообщений: 328
31.07.2014, 12:09 #9
Тут еще и от клавиатуры зависит.
Код писал давно, под дос и на прерываниях, поэтому не повторю сейчас, но еще тогда заметил - получалось не более 5 одновременно нажатых клавиш.. Причем после подключения физически другой клавы - менялось количество
1
castaway
Эксперт С++
4916 / 3024 / 370
Регистрация: 10.11.2010
Сообщений: 11,081
Записей в блоге: 10
Завершенные тесты: 1
31.07.2014, 12:16 #10
Да, я тоже это замечал. Видимо зависит от контроллера клавиатуры.
1
31.07.2014, 12:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
31.07.2014, 12:16
Привет! Вот еще темы с ответами:

Как удержать более пяти клавиш одновременно? - C++
Мне надо, чтобы пользователь моей программы удерживал больше пяти клавиш одновременно, однако как только он удерживает пять клавиш, система...

Как реализовать ввод и чисел и символов одновременно? - C++
1. Как реализовать ввод и чисел и символов одновременно в одномерном массиве? 2. Как реализовать проверку на однократный ввод для чисел и...

Как сделать что бы 2 функции работали одновременно - C++
Здраствуите,подскажите пожалуисто что надо сделать что бы 2 функции работали одновременно,я делаю игру танчики ,допустим танчик едит я...

Как одновременно декларировать векторное и скалярное произведение векторов? - C++
В обоих случаях умножается вектор на вектор. Нельзя же перегрузить по типу значения.


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

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

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