-4

ATM 私はゲームに取り組んでいるので、文字の領域全体を一瞬でレンダリングする方法を探しています。現在、レンダリング速度が遅いことに問題があります(または、ここで具体的には印刷速度であり、遅い方法を知っていますが、それは私が現在使用している最初のオプションのようでした)

ループを使用して描画しているため、文字がちらついたり、文字が次々に描画されたりする問題が発生しないように、テキストを十分に高速に表示する方法はありますか。

どんなアドバイスでも大歓迎です

編集:誰もがこれを地獄のように反対票を投じている場合でも、これは初心者のプログラマーにとって役立つ適切な質問だと思います。何時間もインターネットを調査する代わりに、この問題にどのように取り組むべきかについて実際の考えが浮かびました。

4

2 に答える 2

3

C++ 標準入出力ライブラリは、従来の端末サポートに関して実行できる操作に関して非常に制限されています。

これを回避する唯一の方法は、専用のライブラリを使用することです。コメントで述べたように、使用しているプラ​​ットフォームによっては、十分なはずですncursespdcurses

于 2013-04-09T17:44:28.953 に答える
1

簡単な比較ではcout、Visual Studio では (顕著な違い) よりもはるかに遅いことが示されてprintfいます。正確な違いを編集して戻ります。

明らかに、UI操作用のライブラリは、カーソルを移動したり、実際に変更された画面のビットのみを再描画したりする機能を備えているため、はるかに優れている可能性があります.

編集:次のコードを使用して、2 つの出力方法の速度を測定しました。

#include <iostream>
#include <iomanip>
#include <cstdio>
#include <ctime>

int main(int argc, char **)
{
    clock_t t = clock();
    for(int i = 0; i < 40; i++)
    {
        if (argc == 1)
        {
            std::cout << "0123456789012345678901234567890123456789012345678901234567890123456789\n";
        }
        else
        {
            printf("0123456789012345678901234567890123456789012345678901234567890123456789\n");
        }
    }
    std::cout.flush();
    t = clock()-t;
    std::cout << "Time = " << std::setprecision(3) << t / (double)CLOCKS_PER_SEC;
    return 0;
}

私のマシンでは、printf('mytest x')で約 0.1 秒 (0.098-0.113 秒)、('mytest') で約 0.8 秒 (0.776-0.860)coutかかります。

于 2013-04-09T17:43:30.390 に答える