У меня есть одна функция 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(...);
}