在多个类中使用<curses.h>

时间:2017-01-11 10:44:40

标签: c++ ncurses

我有三个不同的课程。每个班级负责使用ncurses绘制特定的东西。

我必须一次性绘制所有这三件事。其中一个班级负责董事会,另外两个班级在董事会内部吸取一些东西。

我得到了它的工作,但问题是每当我使用clear时,它会清除董事会和其他两件事;我希望董事会留下来永远不会被删除。我想清除只有特定类负责的图纸。

例如,假设我有一个电路板,我有一个person类和一个dog类。当我在draw课程中调用person方法时,它会将我吸引到董事会内部,但每当我将其移动到不同的位置时,它会吸引新人,但它永远不会清除旧的人

除非我使用clear中的curses.h方法,但它会删除并清除包括棋盘和狗在内的所有内容。

但是,我只想删除这个人而不是一切。是否有任何内置方法可以使用除clearerase之外的ncurses,或清除整个屏幕的任何内容?

2 个答案:

答案 0 :(得分:0)

正如Ivan Rubinson在评论中所建议的那样,通常的方法是清除所有内容然后重绘所有内容每一帧/重绘。

根据the documentationclear()应清除整个屏幕:

  

clear(),erase(),wclear()和werase()函数清除当前或指定窗口中的每个位置。

     

clear()和wclear()函数也可以实现与调用clearok()相同的效果,以便在下次调用窗口的wrefresh()时完全清除窗口并重新绘制完整的窗口。 p>

您的主循环/绘图代码应该类似于(伪代码)

clear(); // clear everything

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

// display
refresh();

答案 1 :(得分:0)

您可以通过为每个对象创建一个窗口,并在它们完成后删除它们来完成此操作。这样,您只需清除您要移除的窗口,然后再刷新它,然后delete it

即,使用newwinwaddstrwrefreshwcleardelwin而不是addstrrefreshclear

相关问题