C++提高while循环刷新率速度?

问题描述 投票:0回答:2

所以我想在控制台上制作一款图形游戏。我简单地显示图形

std::cout
ing 彩色空字符串数组 像这样:

while (1 == 1) {
  for (int i = 0; i < height * width; i++) {
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), pixels[i]);
    cout << pixel;
  }
  system("CLS");
}

数组'pixels'存储每个像素的颜色,字符串

pixel = "  ";

问题是 fps 非常低,您可以看到像素“闪烁”,并且绘图过程也非常慢,您可以看到每个像素如何淹没在屏幕中。有没有办法提高 fps,或者有更好的方法来绘制像素?

c++ terminal console
2个回答
1
投票

这种方法的 FPS 非常慢,因为每个

system("CLS");
都会使用命令解释器启动一个新进程并执行操作系统指令 CLS 来清除屏幕。这是一个极高的开销。

不幸的是,没有标准的 C++ 方法来清除屏幕。这是依赖于平台的。您需要使其依赖于平台在Linux平台上使用curses并使用Windows的控制台API(请参阅此处的其他问题以及更多API文档的链接)。


0
投票

就像@Christophe所说,

system("CLS")
非常慢,每次你想清除屏幕时都必须启动一个新进程。

我能想到的最好的方法是使用 ANSI 转义码清除终端,有很多关于它的资源,还有很多清除终端的方法。这是一个例子:

#include <iostream>
#include <cstdio>

int main() {
    // Saves the current screen, then clears entire screen and places cursor at 0, 0
    std::cout << "\e[?47h << \e[2J" << "Press enter to continue..";
    //            ^          ^ Clear Screen
    //            | Save Screen
    getchar();

    // Restores saved screen
    std::cout << "\e[?47l" << std::endl;

    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.