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

Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет - C++

Восстановить пароль Регистрация
 
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
04.05.2014, 06:07     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #1
Доброй ночи, кто может объяснить почему иногда отслеживает нажатие на три кнопки сразу, а иногда нет. И как выйти с ситуации *(
P.S. Пишу консольный бомбер, надо ставить пробелом бомбу вовремя движения, включая движение по диагонали.
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
#include <iostream>
#include <Windows.h>
 
using namespace std;
 
void main()
{
    int left, right, down, up, space;
    
    while(true)
    {
        left=right=down=up=space=0;
        if(GetAsyncKeyState(VK_LEFT))
        {
            left = 1;
        }
        if(GetAsyncKeyState(VK_RIGHT))
        {
            right = 1;
        }
        if(GetAsyncKeyState(VK_UP))
        {
            up = 1;
        }
        if(GetAsyncKeyState(VK_DOWN))
        {
            down = 1;
        }
        if(GetAsyncKeyState(VK_SPACE))
        {
            space = 1;
        }
        if(GetAsyncKeyState(VK_ESCAPE))
        {
           exit(0);
        }
        system("cls");
        cout << "LEFT:  " << left << endl;
        cout << "RIGHT:  " << right << endl;
        cout << "UP:  " << up << endl;
        cout << "DOWN:  " << down << endl;
        cout << "SPACE:  " << space << endl;
 
        Sleep(50);
    }
 
 
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dimcoder
Полярный
 Аватар для dimcoder
449 / 422 / 66
Регистрация: 11.09.2011
Сообщений: 1,108
04.05.2014, 09:44     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #2
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
почему иногда отслеживает нажатие на три кнопки сразу, а иногда нет.
А Вы зажимаете или нажимаете и сразу отпускаете? Я вот зажимаю все пять клавиш, везде показывает единицы.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
04.05.2014, 09:50  [ТС]     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #3
Пример:
1) Бежим влево (зажали влево)
2) Бежим по диагонали влево-вверх (зажали в придачу еще вверх)
3) При этом всём ставим по дороге мину (нажимаем периодически пробел)

Единица не загорается на space и к тому же идёт системный звук залипания клавиш.

В настройках залипание клавиш полностью отключено. (Win 7 Ultimate SP1)
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
04.05.2014, 10:01     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #4
Это зависит от последовательности, в которой ты их нажимаешь.
Например, если ты сначала нажмешь SPACE, то ни одна другая клавиша не "засчитается".
Необходимо пересмотреть алгоритм в соответствии с задачей.
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
04.05.2014, 10:12  [ТС]     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #5
Цитата Сообщение от castaway Посмотреть сообщение
Это зависит от последовательности, в которой ты их нажимаешь.
Например, если ты сначала нажмешь SPACE, то ни одна другая клавиша не "засчитается".
Необходимо пересмотреть алгоритм в соответствии с задачей.
В моём примере space не первый даже. Обидно что к примеру там вниз+влево+space работает, а влево+вверх+space нет. Хотелось бы понять почему. Да и выбор другого алгоритма так же заводит в тупик:
1) перейти на :
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <conio.h>
if(kbhit()) 
{
 
switch(getch()) 
{
  case 72: //вверх
cout << "Up" << endl;
break;
  case 80: //вниз
cout << "Down" << endl;
break;
  case 75: //влево 
cout << "left" << endl;
break;
  case 77: //вправо
cout << "Right" << endl;
break;
}
}
}
  }
Не позволяет двигаться по диагоналям и при одновременном нажатии влево+вправо вместо остановится двигается влево.


Других вариантов не знаю
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
04.05.2014, 10:52     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #6
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
В моём примере space не первый даже.
Он последний. Не беря в расчет ESCAPE.
Проясни задачу. Тебе нужно считывать коды с задержкой или без?
rikimaru2013
C++ Game Dev
 Аватар для rikimaru2013
2139 / 972 / 223
Регистрация: 30.11.2013
Сообщений: 3,241
05.05.2014, 07:46  [ТС]     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #7
Цитата Сообщение от castaway Посмотреть сообщение
Проясни задачу.
Цитата Сообщение от rikimaru2013 Посмотреть сообщение
P.S. Пишу консольный бомбер, надо ставить пробелом бомбу вовремя движения, включая движение по диагонали
Зажимаю влево+вверх бегу по диагонали (x -= mmm; y -= ddd и в любой момент могу нажать пробел, что поставит бомбу

Добавлено через 20 часов 28 минут
Запутался - всё еще ищу решение. Переписал вместо пробела на любую другую символьную клавишу. То ставит бомбочку, то нет )
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2014, 08:08     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет
Еще ссылки по теме:

C++ Иногда переменные, созданные в main, не видны в цикле for
Нужно, чтобы консоль не ожидала нажатие клавиши, а сразу закрывалась C++
Компьютер при исчислениях ненадолго виснет и иногда выбивает число nan C++

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

Или воспользуйтесь поиском по форуму:
ValeryS
Модератор
6377 / 4843 / 442
Регистрация: 14.02.2011
Сообщений: 16,057
05.05.2014, 08:08     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет #8
rikimaru2013,
дано на откуп клавиатуре какие клавиши и сколько нажимать, и какие она будет генерировать последовательности
гарантировано три клавиши(CTRL+ALT+Delete), дальше зависит дальше зависит от клавы

проверяется просто в любом текстовом редакторе по зажимай клавиши
так что програмно, по моему, эту тему не решить
Yandex
Объявления
05.05.2014, 08:08     Почему иногда отслеживается нажатие на три клавиши сразу, а иногда нет
Ответ Создать тему
Опции темы

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