Вам нужно позвонить refresh()
(до usleep
).
Обновление: новые сегменты кода, вставленные в пастбище (в нескольких комментариях), указывают на реальную проблему, такую же, как в
ncurses-refresh : смешивание
stdscr
(подразумевается в следующих двух вызовах) и
getch
и
refresh
с
newwin
и
wrefresh
.
Обновление 2: использование полного кода, плюс некоторый взлом, Я получил его на работу (для некоторого значения "работа", я явно не правильно вызываю printmap (), и я создал поддельный файл "карты").
Не присматриваясь, я простоизменил все вхождения getch()
на wgetch(win.window)
, все mvprintw
вызовы mvwprintw
(чтобы использовать это же окно) и удалил хотя бы один ненужный getch / wgetch.Тогда суть проблемы:
while (!checkcollisions(pos_f, input)) {
- pos_f = moveobject(pos_f, input, "..");
- // sleep + wrefresh(win.window) doesn't work, neither does refresh()
+ struct position new_pos = moveobject(pos_f, input, "..");
+ printmap(pos_f, new_pos);
+ pos_f = new_pos;
+ wrefresh(win.window);
+ fflush(stdout);
+ usleep(50000);
}
Вышеупомянутый вызов printmap
определенно неверен, но все же вам определенно нужно сделать что-то в цикле, чтобы изменить то, что в win.window
(или stdscr
или какое-то другое окно, которое вы открыли, или что-то еще);и затем вам нужно принудительно обновить его, и вывести вывод на стандартный вывод с помощью fflush(stdout)
перед сном.