Как удалить мерцание из анимации пакетного файла?

Итак, я работал над поддельным графическим интерфейсом для финала обзора YouTube, над которым я работаю. По сути, это набор символов и текста в виде прямоугольников, которые имитируют монохромный терминал 80-х годов. В любом случае, в программе есть анимация, которая мерцает тоннами и ненадолго мигает, когда я перехожу к следующему этапу разделов, которые не анимированы. То, как я настроил фреймы, — это просто графический интерфейс, написанный с помощью символов рисования блоков и текста, формирующего весь экран. Анимации настроены так, что после одного кадра в качестве таймера используется «ping localhost», затем «cls», затем следующий кадр и так далее. Я предполагаю, что «cls» является причиной мерцания. Обычно меня бы устраивало мерцание, поскольку я считаю, что оно добавляет ощущение чего-то из 80-х, однако, поскольку я планирую использовать это в видео на YouTube, чтобы его мог увидеть весь мир, я не хочу, чтобы это произошло. стать причиной эпилептического припадка. Есть ли другой способ устранить мерцание или другой способ оживить это, чтобы мерцание не происходило? У меня уже есть вся программа, и мне бы очень не хотелось ее выбрасывать. Другая информация заключается в том, что я работаю в Windows 10 и использовал Notepad ++, чтобы сделать это.

Прежде чем писать сценарии, стоит изучить методы. Без включения минимального воспроизводимого примера метода, который вы используете, или версий Windows, на которых вы хотите его использовать, мало что может помочь в том, как изменить существующий сценарий, чтобы уменьшить или устранить мерцание.

T3RR0R 14.12.2020 00:22

Я на Windows 10. К сожалению, пример рассматриваемого кода имеет длину 1194 строки.

SomeInternaut 14.12.2020 00:29

Вы правы, это cls вызывает мерцание. Поскольку вы используете Windows 10, вы можете использовать escape-последовательности VT100, чтобы переместить курсор обратно в начало окна, что будет иметь тот же эффект, что и cls, но без фактической очистки экрана. Тогда вы просто пишете поверх того, что уже есть.

SomethingDark 14.12.2020 01:19
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
3
567
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Чтобы уточнить комментарий 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"

Пример скрипта, создающего анимацию без мерцания с постоянной частотой кадров, можно найти в этом ответе

Другие вопросы по теме