#c #panel #ncurses
#c #панель #ncurses
Вопрос:
У меня есть одна функция 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 также имеет панель pendant, которая находится поверх всех других панелей.
Перед вызовом этой функции я разрешаю пользователю выполнять неблокирующий ввод с помощью getch() и таймаута (0):
fflush(stdin);
key = getch();
if(key != ERR){ ...
только при первом вызове do_refresh символ выводится в окно, позже ничего не меняется, хотя xPos и yPos, а также все другие параметры mvwaddch действительны и меняются с течением времени.
Выполнение перерисовки окна приводит к сбою в сегменте, использование wgetch(w_game) вместо getch() не возвращает входных данных.
Я был бы очень признателен, если бы кто-нибудь мог хотя бы сослаться на приличную документацию, что следует учитывать при использовании wgetch вместо этого и что он делает по-другому.
ОБНОВЛЕНИЕ Я нашел решение проблемы, функция, которая настраивает содержимое панели, изменяет адрес окон!, вы должны вернуть (новое) назначение указателя на main и сбросить его там следующим образом:
...setup_panels(...){
return w_game; // my window
}
int main(...){
WINDOW *w_game;
[...]
w_game = setup_panels(...);
}
Комментарии:
1. Что касается документации ncurses, я нахожу, что ничто не сравнится с справочными страницами. invisible-island.net/ncurses/man/ncurses.3x.html
2. Я ничего не читал об изменении указателя в документе, но все равно спасибо.
3. Не могли бы вы, пожалуйста, переместить текст обновления в ответ (ниже) и пометить его как ответ?
4. нет такой кнопки, чтобы ответить на мой собственный вопрос