我有一个简单的游戏,您可以通过telnet播放,但它通过打印几个换行符然后再次发送整个屏幕来刷新屏幕。有时这会导致闪烁,如果用户向上滚动终端,他们会看到所有旧帧。
我可以做些什么改进?
有没有办法只修改某些字符而不是重新发送所有内容?这可能会阻止闪烁,并阻止用户终端填满大量旧帧。
我尝试发送退格字符(8),但这不会比当前行的开头更进一步。这样的东西会转到其他线上,这将是完美的!
另外,我注意到telnet towel.blinkenlights.nl
没有使用我糟糕的帧发送方法..所以我知道有更好的解决方案。
答案 0 :(得分:3)
诅咒会这样做。如果你想自己编写,算法非常简单。它记住一个缓冲区中屏幕的状态,程序将新屏幕绘制到另一个缓冲区,它调用刷新,并且库比较两个缓冲区并仅发送所需的更改。然后它将新缓冲区复制到当前缓冲区,然后转到下一帧。棘手的部分是处理所有不同的终端类型及其控制序列以移动光标。 Curses的东西包含了一个终端库。
答案 1 :(得分:1)
显然我可以使用ANSI转义序列..似乎在我的终端上工作正常。
这可能是一个可怕的不受支持的事情,但它回答了这个问题,所以我会在这里留下链接,供将来可能需要它的人使用。