ncurses неблокирует чтение толкает курсор в нижней части окна

Основной цикл моей игры основан на неблокирующем чтении из getnstr. Он проверяет, имеет ли строка, к которой она прочитала, ненулевую длину, прежде чем продолжить с остальной частью цикла (я не смог найти соглашение для получения такого поведения, если оно существует).

Проблема в том, что он заставляет вводить курсор внизу окна, как если бы я нажал Enter или что-то в этом роде.

    char command[5];
timeout(0);
while (getnstr(command, 4) && gameActive) {
if (strlen(command) == 0) { continue; }
...
}

0

Решение

Согласитесь, что это кажется удивительным, но SVr4 ругается (что ncurses соответствует в этой детали) всегда переходит к следующей строке после завершения (попытки) чтения символов.

Вы можете увидеть соответствующий код для (Open) Solaris на Illumos’s Github в строках 191-207:

/*
* The following code is equivalent to waddch(win, '\n')
* except that it does not do a wclrtoeol.
*/
if (doecho) {
SP->fl_echoit = TRUE;
win->_curx = 0;
if (win->_cury + 1 > win->_bmarg)
(void) wscrl(win, 1);
else
win->_cury++;

win->_sync = savsync;
win->_immed = savimmed;
win->_leave = savleave;
(void) wrefresh(win);
}

это «win->_cury++;«(или операция прокрутки).

1

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector