Я пытаюсь использовать ncurses для создания игры. Я установил его так, чтобы символ перемещался с помощью клавиши со стрелкой, но если я удерживаю клавишу со стрелкой некоторое время, а затем отпускаю, символ будет продолжать двигаться некоторое время, прежде чем останавливаться.NCURSES ввод клавиатуры во время вызова сна
Это моя инициализация:
initscr();
start_color();
cbreak();
noecho();
nodelay(stdscr,TRUE);
keypad(stdscr, TRUE);
Это мой главный цикл:
while(1) {
...
if (key == (char)27) {
break;
}
else if (key == KEY_DOWN) {
key = 0;
player->advance(0, 1);
}
else if (key == KEY_UP) {
key = 0;
player->advance(0, -1);
}
else if (key == KEY_LEFT) {
key = 0;
player->advance(-1, 0);
}
else if (key == KEY_RIGHT) {
key = 0;
player->advance(1, 0);
}
else {
key = getch();
}
std::this_thread::sleep_for(std::chrono::milliseconds {1000/30});
}
Я использую sleep_for, потому что я заметил, что если я использую тайм-аут, то изменения framrate если я m нажмите клавишу. Использование sleep_for создает согласованную частоту кадров, но вход как-то «липкий», как я объяснил. Мне нужно как-то это исправить. Либо получить согласованную рамку с использованием тайм-аута, либо «отключить» ввод при использовании sleep_for.
player-> advance (int, int) перемещает игрока на один шаг в указанном направлении. Направление определяется как изменение x и изменение y для применения к текущей позиции.
Пожалуйста, добавьте правильный тег для используемого вами языка. Он выглядит как [tag: C++]. – usr2564301