linuxterminalanimation – 延迟“帧”打印的最佳方法(在C中)

我正在为terminaldevise一个简单的pong克隆,并且需要一种延迟“帧”打印的方法。

我有一个二维数组

screen[ROWS][COLUMNS] 

和打印屏幕的function

 void printScreen() { int i = 0; int j; while(i < ROWS) { j = 0; while(j < COLUMNS) { printf("%c", screen[i][j]); j++; } i++; } } 

看来,当我这样做

 printScreen(); usleep(1000000); printScreen(); 

它将 printScreen() 期间 sleep执行。

在terminal上做这种types的animation的任何提示将不胜感激。 也许我这样做完全错了。 这样的ASCII电影如何完成?

编辑我要用ncurses。 谢谢你的build议。

在Ubuntu的sudo aptitude install libncurses5-dev并用-lncurses编译。

Ascii电影是用像图形显示驱动器一样工作的aalib完成的。 大多数开发完整的控制台应用程序和游戏的人使用curses框架或其类似ncurses的版本。 走这条路线的一个真正的限制是你必须要完整的ptty(你不能参与)。

标准输出缓冲。 在被告知要打印一个换行符或被明确刷新之前,它不会实际发送输出到终端设备。

要刷新输出,只需添加:

 fflush(stdout); 

而且,因为你所做的只是印刷一个字符,所以printf是过度的。 你可以用你的printf替换:

 putchar(screen[i][j]); 

如果我正确地理解了你,你需要添加fflush(stdout);printScreen()返回之前。 但是有更好的(更简单的)做文本动画和终端控制的方法。 以ncurses为例。