В настоящее время я слушаю входы клавиатуры через getch(), а цикл работает отлично. Однако, если я удерживаю левую кнопку и нажимаю вверх, левое движение останавливается, пока я не нажму его снова. Единственный способ, который я могу придумать для решения этого, требует знания того, удерживается ли ключ/когда он выпущен. Я использую ncurses, которые предположительно обладают этой способностью, но через все мои поиски я не нашел ничего полезного.C++ Дифференцирование нажатия клавиши vs Key Release
Тетрис фрагмент кода в вопросе:
int ch = getch();
while(ch != 'x') {
// Handle arrow keys first
if (ch == '\033') {
getch(); // Get rid of slash
switch (getch()) {
case 'A': rotate(); redraw(); break; // Up
case 'B': move(DOWN); redraw(); break; // Down
case 'C': move(RIGHT); redraw(); break; // Right
case 'D': move(LEFT); redraw(); break; // Left
}
} else {
switch(ch) {
// Stuff not relevant to this question
}
}
ch = getch();
}
Вы уверены, что сталкивается с этой проблемой? Я думаю, он спрашивает о keyListener –
Да, я уверен, проблема в том, что нажатые ключевые сигналы не доходят до аппаратного обеспечения. Несколько дней назад у меня была аналогичная проблема, я работал над SDL, и я сделал игру RPG, в которой мне пришлось переместить моего персонажа в 8 направлениях. Верх + левая, верхняя + правая, нижняя + левая, нижняя + правая и т. Д. Проблема заключалась в том, что при нажатии верхней клавиши и нажатии левой клавиши. Персонаж перестал двигаться вверх. Я убедился, что SDL_EnableKeyRepeat() включен, и проблема по-прежнему сохраняется. Поэтому я прочитал об этой статье и изменил contorls. Теперь он отлично работает. Это проблема с оборудованием. Довольно понятно. – kotAPI
@OMerObaid, также не является ключевой функцией java? Я думал, что это вопрос на C++. – kotAPI