ncurses пишет в окно не отображается - PullRequest
1 голос
/ 08 июня 2011

У меня есть одна функция do_refresh, которая должна рисовать некоторый символ в окне, подобном этому:

void do_refresh(WINDOW *w_game, int *xPos, int *yPos, char vector[], snake *snake){
    mvwaddch(w_game, (*yPos), (*xPos), snake->headsym);// mv to new pos and place char
    wrefresh(w_game);
}

В окне w_game также есть подвеска на панель, которая лежит поверх всех остальных панелей. Перед вызовом этой функции я позволил пользователю делать неблокирующие вводы с помощью getch () и timeout (0):

fflush(stdin);
key = getch();
if(key != ERR){ ...

только при первом вызове do_refresh символ обращается к окну, позже ничего не меняется, хотя xPos & yPos, а также все другие параметры mvwaddch действительны и изменяются с течением времени.

Выполнение перерисовки в окне вызывает ошибку по умолчанию, использование wgetch (w_game) вместо getch () не возвращает ввода.

Я был бы очень благодарен, если бы кто-нибудь хотя бы мог сослаться на приличную документацию, что следует учитывать при использовании wgetch и что она делает иначе.

UPDATE Я нашел решение проблемы: функция, которая настраивает панель, изменяет адрес окон !, вы должны вернуть (новый) пункт назначения указателя на main и сбросить его там вот так :

...setup_panels(...){
  return w_game; // my window
}
int main(...){
  WINDOW *w_game;
  [...]
  w_game = setup_panels(...);
}
...