Окрашивание символов и двойная буферизация

https://pastebin.com/chZ35J7X - тут код

переменная frame - указатель на string, там хранится карта.

Я пробегаю по строке (frame), и каждый символ вывожу отдельно, так как определенный знак надо раскрасить определенным цветом. То есть вместо того чтобы выводить так:

SetConsoleCursorPosition(console, {0, 0});

WriteFile(console, frame->data(), frame->size(), NULL, NULL);

SetConsoleActiveScreenBuffer(console);

приходится использовать цикл:

SetConsoleCursorPosition(console, {0, 0});

for(int i = 0; i < frame->size(); ++i){

    if((*frame)[i] == '#'){

        SetColor(ConsoleColor::Blue, ConsoleColor::Black, console);

    }else if((*frame)[i] == '.' || (*frame)[i] == '*'){

        SetColor(ConsoleColor::LightRed, ConsoleColor::Black, console);

    }else if((*frame)[i] == 'O'){

        SetColor(ConsoleColor::Yellow, ConsoleColor::Black, console);

    }else{

        SetColor(ConsoleColor::White, ConsoleColor::Black, console);

    }

    WriteFile(console, &(*frame)[i], 1, NULL, NULL);

}

//WriteFile(console, frame->data(), frame->size(), NULL, NULL);

SetConsoleActiveScreenBuffer(console);

Но из-за этого эффект от двойной буферизации падает. Как выводить раскрашенный текст так же быстро как и не раскрашенный? Какие идеи использовать? Пытался использовать управляющие последовательности. Но они не работают.


Ответы (0 шт):