Python curses 终端屏幕闪烁
我正在写一个用Python做的curses游戏(https://github.com/pankshok/xoinvader)。
我遇到了一个问题:在终端模拟器里运行得很好,但在tty屏幕上却闪烁。
我试着用curses.flash(),结果情况更糟。
比如,屏幕字段:
self.screen = curses.newwin(80, 24, 0, 0)
主循环:
def loop(self):
while True:
self.events()
self.update()
self.render()
渲染方法:(https://github.com/pankshok/xoinvader/blob/master/xoi.py#L175)
self.screen.clear()
#draw some characters
self.screen.refresh()
time.sleep(0.03)
在sleep函数里的固定时间是暂时的,等我写好60次渲染调用的控制器后会改进。
请问如何正确实现渲染方法?
提前感谢,
保罗。
1 个回答
29
不要用 clear
来清屏,应该用 erase
。使用 clear
会设置一个标记,这样当你调用 refresh
时,它首先会清空终端的屏幕。这就是为什么终端的屏幕会出现闪烁的原因。用户会先看到旧的屏幕,然后是一个完全空白的屏幕,最后才是你新的屏幕。如果你用 erase
,那么它会直接修改旧的屏幕,让它看起来像新的那样。
在一些比较慢的终端上,你可能还是会看到一些奇怪的闪烁或者其他问题。你可以尝试调用 screen.idcok(False)
和 screen.idlok(False)
,这样可以阻止 curses 使用插入和删除操作来更新屏幕。