这不是 Haskell 的输出 ascii 动画? 的重复,因为该帖子尽管有标题,却是关于 如何确保帧之间的停顿最小化;关于实际绘图,OP认为
直接使用
与putStrLn
ansi-terminal包中的clearScreen
一起使用,通过 这个答案找到。
我正在徘徊的是:我真的必须
clearScreen
并重新putStrLn
终端中的每一行,即使整个终端中只有少数字符发生变化?
考虑在终端中实现 snake,其中大多数情况下每一帧都会与前一帧相差两个字符。我认为只更新屏幕上所需位置的单个字符而不是重新渲染整个终端会更有效。
我在 Haskell 中有哪些选项?
不,我不是在寻找 ncurses。我只是想知道如何在终端中制作动画,方法是清除屏幕一次,然后设置/清除各个屏幕位置。
您可以通过将光标移动到所需位置然后写入字符来覆盖终端中的字符。
ansi-terminal 软件包具有类似
setCursorPosition
的功能。
或者您可以查找代码并自己编写。 例如,这将在 5, 5 处写入“x”。
putStr "\ESC[5;5Hx"