2017-01-11 7 views
0

У меня есть три разных класса. Каждый класс отвечает за рисование определенной вещи с помощью ncurses.Использование <curses.h> в нескольких классах

Я должен нарисовать все три вещи одновременно. Один из классов отвечает за доску, а два других класса рисуют что-то внутри доски.

Я получил его на работу, но проблема в том, что всякий раз, когда я использую clear, он очищает доску и другие две вещи; Я хочу, чтобы доска осталась и никогда не стиралась. Я хочу очистить чертеж, за который отвечает только конкретный класс.

Например, у меня есть доска, и у меня есть класс person и класс dog. Когда я вызываю метод draw в классе person, он рисует мне человека внутри доски, но всякий раз, когда я переношу его в другую точку, он рисует нового человека, но он никогда не очищает старого человека.

То же самое с собакой, если я не использую метод clear от curses.h, но он стирает и очищает все, включая доску и собаку.

Однако я хочу только стереть человека, а не все. Есть ли встроенный метод для использования из ncurses, кроме clear или erase, или что-нибудь, что очищает весь экран?

+2

Очистить все и перерисовать все. –

ответ

0

Как Иван Рубинсону предложил в комментариях, обычный подход к ясной всем затем перекроить все, каждый кадр/перекрашивать.

Согласно the documentation, clear() должен очистить весь экран:

Прозрачный(), удалить(), wclear() и WERASE() функции, четкое каждую позицию в текущем или указанном окне.

Функции clear() и wclear() также обеспечивают тот же эффект, что и вызов clearok(), так что окно полностью очищается при следующем вызове wrefresh() для окна и полностью перерисовывается.


Ваш главный цикл/рисунок код должен выглядеть примерно так (псевдокод):

clear(); // clear everything 

// redraw everything 
for(auto& widget : drawables) 
{ 
    widget.draw(); 
} 

// display 
refresh(); 
0

Вы можете сделать это, создав окно для каждого из объектов, и их удаления когда они закончатся. Таким образом, вам нужно только очистить окно, которое вы удаляете, обновить его, а затем delete it.

То есть, использовать newwin, waddstr, wrefresh, wclear и delwin, а не addstr, refresh и clear.