Итак, я работал над поддельным графическим интерфейсом для финала обзора YouTube, над которым я работаю. По сути, это набор символов и текста в виде прямоугольников, которые имитируют монохромный терминал 80-х годов. В любом случае, в программе есть анимация, которая мерцает тоннами и ненадолго мигает, когда я перехожу к следующему этапу разделов, которые не анимированы. То, как я настроил фреймы, — это просто графический интерфейс, написанный с помощью символов рисования блоков и текста, формирующего весь экран. Анимации настроены так, что после одного кадра в качестве таймера используется «ping localhost», затем «cls», затем следующий кадр и так далее. Я предполагаю, что «cls» является причиной мерцания. Обычно меня бы устраивало мерцание, поскольку я считаю, что оно добавляет ощущение чего-то из 80-х, однако, поскольку я планирую использовать это в видео на YouTube, чтобы его мог увидеть весь мир, я не хочу, чтобы это произошло. стать причиной эпилептического припадка. Есть ли другой способ устранить мерцание или другой способ оживить это, чтобы мерцание не происходило? У меня уже есть вся программа, и мне бы очень не хотелось ее выбрасывать. Другая информация заключается в том, что я работаю в Windows 10 и использовал Notepad ++, чтобы сделать это.
Я на Windows 10. К сожалению, пример рассматриваемого кода имеет длину 1194 строки.
Вы правы, это cls
вызывает мерцание. Поскольку вы используете Windows 10, вы можете использовать escape-последовательности VT100, чтобы переместить курсор обратно в начало окна, что будет иметь тот же эффект, что и cls
, но без фактической очистки экрана. Тогда вы просто пишете поверх того, что уже есть.
Чтобы уточнить комментарий SomethingDark -
Коды виртуальных терминалов поддерживаются только в Windows 10.
Управляющий символ Escape можно определить, проанализировав команду Prompt $E. Один из методов:
for /F "delims=#" %%a in ('"prompt #$E# & for %%a in (1) do rem"') do set "\E=%%a"
Другой, более простой метод:
for /F %%a in ('Echo prompt $E ^|cmd') do set "\E=%%a"
Подавляющее большинство последовательностей, описанных здесь, поддерживаются
Коды виртуальных терминалов также поддерживаются командой Type
, что позволяет эффективно обновлять экран путем вывода измененных ячеек в файл, а затем ввода файла на экран.
Примечание. Проблемы могут возникнуть при использовании шрифта с символами кодовой страницы UTF-8, даже если задана правильная кодовая страница. Чтобы избежать этих проблем, явно перенаправьте команду файла типа на Con
. IE:
Type "filename.ext" > Con
После определения символа Escape %\E%
курсор консоли можно подавить с помощью:
<nul set /P "=%\E%[?25l"
И включено с:
<nul Set /P "=%\E%[?25h"
Отдельные ячейки можно очистить с помощью:
rem /* for current cell location */
<nul Set /P "=%\E%[1X"
rem /* for a cell located at substituted y x coordinate value */
<nul Set /P "=%\E%[y;xH%\E%[1X"
Пример скрипта, создающего анимацию без мерцания с постоянной частотой кадров, можно найти в этом ответе
Прежде чем писать сценарии, стоит изучить методы. Без включения минимального воспроизводимого примера метода, который вы используете, или версий Windows, на которых вы хотите его использовать, мало что может помочь в том, как изменить существующий сценарий, чтобы уменьшить или устранить мерцание.