【问题标题】:linux terminal animation - best way to delay printing of 'frame' (in C)linux终端动画 - 延迟打印“帧”的最佳方法(在C中)
【发布时间】:2011-01-05 18:59:06
【问题描述】:

我正在为终端制作一个简单的 pong 克隆,需要一种方法来延迟“帧”的打印。

我有一个二维数组

screen[ROWS][COLUMNS]

还有一个打印屏幕的函数

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();

它将sleep 执行期间 printScreen()

任何在终端上执行此类动画的提示将不胜感激。也许我这样做完全错了。 ASCII电影like this是怎么做到的?

编辑我将使用 ncurses。谢谢两位的建议。

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

【问题讨论】:

    标签: c linux animation terminal


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      stdout 被缓冲。在被告知打印换行符或显式刷新之前,它实际上不会将输出发送到终端设备。

      要刷新输出,只需添加:

      fflush(stdout);
      

      此外,由于您所做的只是打印单个字符,因此 printf 太过分了。您可以将 printf 替换为:

      putchar(screen[i][j]);
      

      【讨论】:

      • 噢! putchar 要简单得多。谢谢。
      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-08
        • 2017-08-31
        • 2013-09-25
        相关资源
        最近更新 更多