【问题标题】:How to make a while loop without the screen flickering如何在不闪烁屏幕的情况下进行while循环
【发布时间】:2016-03-03 06:19:15
【问题描述】:

我正在尝试制作 PacMan 游戏的变体,但遇到了一些问题,其中一个问题是不知道如何打印整个地图并且 pacman 在屏幕不闪烁的情况下移动。 这就是我为打印所做的:

while(commmand) {
    system("CLS");
    display();
    if(kbhit()) {
        command = getch();
        move(command);
    }

    move(command);
    printf("SCORE: %d",score);
}

命令、显示和移动是我的功能,它们可以正常工作。有没有其他方法可以在不闪烁屏幕的情况下做到这一点?

【问题讨论】:

  • 查看 ncurses 库
  • 您是否通过控制台将此游戏显示为 ASCII?

标签: c pacman display


【解决方案1】:

是的,有。您想查看double-buffering(或多缓冲)。一般的想法是,您有两个(或更多缓冲区),而一个缓冲区(例如缓冲区 A)显示在屏幕上,您正在执行所有计算(即四个幽灵的物理、运动、AI)并绘制到第二个缓冲区,比如说缓冲区 B。当所有计算完成后,我们交换 A 和 B,以便显示缓冲区 B,然后使用缓冲区 A 进行计算。

OpenGL 原生支持双缓冲,请参阅this tutorial。我从未使用过 DirectX,所以我不能谈论它,但如果它没有办法进行双缓冲,我会感到惊讶。

【讨论】:

  • 我认为最初的问题是关于使用 ASCII 字符打印游戏的控制台应用程序。
  • @Alexguitar 你可能是正确的,但他没有具体说明。双缓冲仍然应该起作用,尽管需要做更多的工作。 OP 必须自己管理缓冲区,并使用低级路由(可能是 bitblt)来交换缓冲区。您提到了 (n)curses,它们是否支持双缓冲?
  • 是的,不提是我的错……我必须用 ASCII 字符来做……这会改变什么吗?
  • ncurses 是否适用于 Windows?我的代码块似乎没有库。
  • (n)curses 来自 Unix/Linux 世界。似乎有一个 Windows 端口(请参阅 stackoverflow.com/questions/138153/…cplusplus.com/forum/general/75406)。充其量,您可能需要下载库和必要的头文件,安装它们,然后确保您的开发环境可以找到它们;在最坏的情况下,您将获得可能会或可能不会用您的编译器完全编译的源代码。 cboard.cprogramming.com/game-programming/…,这可能也很有趣。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-11
  • 2013-01-02
  • 1970-01-01
  • 2021-03-12
  • 2022-12-10
  • 1970-01-01
相关资源
最近更新 更多