【问题标题】:How do I remove flickering from a batch file animation? [closed]如何从批处理文件动画中删除闪烁? [关闭]
【发布时间】:2021-03-24 15:45:46
【问题描述】:

所以我一直在批量制作一个假 GUI,以结束我正在制作的 YouTube 评论。它基本上是一堆画框字符和文本,有点模拟 80 年代的单色终端。无论如何,程序中有一些动画,当我进入下一个没有动画的部分时,它会闪烁很多次并短暂闪烁。我设置框架的方式是,好吧,只是用画框字符和构成整个屏幕的文本编写的 GUI。动画设置为在一帧后使用“ping localhost”作为计时器,然后是“cls”,然后是下一帧,依此类推。我认为“cls”是导致所有闪烁的原因。通常我会接受闪烁,因为我相信它会增加 80 年代的感觉,但是当我计划在 YouTube 视频中使用它让全世界看到时,我不想是某人癫痫发作的原因。是否有另一种方法来消除闪烁或另一种方法来制作动画以使闪烁不会发生?我已经完成了整个程序,不想把它全部扔掉。其他信息是我在 Windows 10 上并使用 Notepad++ 来制作这个东西。

【问题讨论】:

  • 在编写脚本之前研究方法是值得的。如果不包括您使用的方法的最小可重现示例,或者您要在哪个版本的窗口上使用它,那么对于如何修改现有脚本以减少或消除闪烁几乎没有帮助
  • 我使用的是 Windows 10。不幸的是,有问题的代码示例长达 1194 行。
  • 你说得对,是cls 导致了闪烁。由于您使用的是 Windows 10,因此您可以使用 VT100 转义序列将光标移回窗口的开头,这将具有与 cls 相同的效果,但不会实际清除屏幕。然后,您只需将已有的内容改写即可。

标签: batch-file animation cmd notepad++ flicker


【解决方案1】:

详细说明SomethingDark的评论-

仅 Windows 10 支持虚拟终端代码

转义控制字符可以通过解析 The 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"

支持绝大多数序列的described here

Type 命令也支持虚拟终端代码,通过将更改的单元格输出到文件,然后将文件输入到屏幕来实现高效的屏幕更新。
注意:使用 type with 时可能会出现问题UTF-8 代码页字符,即使设置了正确的代码页 - 为避免这些问题,请将 type file 命令显式重定向到 Con。即:

Type "filename.ext" > Con

定义转义字符%\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"

可在this answer 找到生成具有一致帧速率的无闪烁动画的示例脚本

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-09
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多